Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Warning: mysqli_stmt_bind_param(): Number of variables doesn't match number of parameters
 
 автор: root_xxx   (11.04.2016 в 14:43)   письмо автору
 
 

1 искал, читал, вникал, но :(
---
Пример вставки (http://php.net/manual/ru/mysqli-stmt.bind-param.php),
переделанный под мою бд, работает:

<?php
$ddb 
mysqli_connect('localhost''user''1111''mdbase');

/* проверка подключения */
if (!$ddb) {
    
printf("Не удалось подключиться: %s\n"mysqli_connect_error());
    exit();
}

$stmt mysqli_prepare($ddb"INSERT INTO users VALUES (?, ?, ?, ?, ?)");

echo 
'<pre>';
print_r ($stmt);
echo 
'</pre>';

mysqli_stmt_bind_param($stmt'dsssd'$uid$code$language$official$percent);

$code 'DEU';
$language 'Bavarian';
$official "F";
$percent 147;

/* выполнение подготовленного запроса */
mysqli_stmt_execute($stmt);

printf("%d строк вставлено.\n<br>"mysqli_stmt_affected_rows($stmt));

/* закрываем запрос */
mysqli_stmt_close($stmt);

/* очищаем таблицу CountryLanguage */
//mysqli_query($link, "DELETE FROM users WHERE mail_users='Bavarian'");

printf("%d строк удалено.\n<br><hr>"mysqli_affected_rows($ddb));
//////////////

///////////////////////

/* закрываем подключение */
mysqli_close($ddb);

?>


отладка
mysqli_stmt Object
(
    [affected_rows] => 0
    [insert_id] => 0
    [num_rows] => 0
    [param_count] => 5
    [field_count] => 0
    [errno] => 0
    [error] => 
    [error_list] => Array
        (
        )

    [sqlstate] => 00000
    [id] => 1
)




[param_count] => 5


5 параметров соответствует mysqli_stmt_bind_param($stmt, 'dsssd', $uid, $code, $language, $official, $percent);
---
Я делаю select:

$ddb = mysqli_connect('localhost', 'user', '1111', 'mdbase');
$rawdata=mysqli_prepare($ddb, "select uid_users from users");

//отлдака
echo '<pre>';
print_r ($rawdata);
echo '</pre>';

mysqli_stmt_bind_param($rawdata, 'i', $uid_users);

mysqli_stmt_execute($rawdata);
...
...


В итоге получается, :( что ничего не получается.

Warning: mysqli_stmt_bind_param(): Number of variables doesn't match number of parameters
 in prepared statement in /var/www/html/stm.php on line 44


И я выяснил вторичную причину: не совпадает количество переменных и параметров. Потому что [param_count] => 0. До этого шага я дошел, дальше не знаю что и как.

mysqli_stmt Object
(
    [affected_rows] => 0
    [insert_id] => 0
    [num_rows] => 0
    [param_count] => 0
    [field_count] => 1
    [errno] => 0
    [error] => 
    [error_list] => Array
        (
        )

    [sqlstate] => 00000
    [id] => 2
)


тбл и данные:
mysql> select uid_users from users;
+-----------+
| uid_users |
+-----------+
|        11 |
|        12 |
|        38 |
...
...

|        60 |
|        61 |
|        62 |
|        63 |
|        64 |
+-----------+
28 rows in set (0.01 sec)

mysql> 



ВАЖНО! Если будете разъяснять что и почему, то пожалуйста, пишите в процедурном стиле.

  Ответить  
 
 автор: Trianon   (11.04.2016 в 15:56)   письмо автору
 
   для: root_xxx   (11.04.2016 в 14:43)
 

Вы пытаетеь всобачить в запрос переменную
mysqli_stmt_bind_param($rawdata, 'i', $uid_users);

Но в этом запросе "select uid_users from users" нет ни одного символа ? ( символа привязки переменных).
В insert было пять ? . Пять переменных и привязались.
А в select нет ни одного.

Вероятно, на смом деле Вы хотели присобачить не переменные параметров запроса,
а переменные результата выборки.
Ну так для этого применяется функция mysqli_bind_result()

  Ответить  
 
 автор: root_xxx   (11.04.2016 в 21:17)   письмо автору
 
   для: Trianon   (11.04.2016 в 15:56)
 

та да, bind_result - как раз для селекта.
---
вот переписал (тоже без знаков ?). Оно тоже выдает warng.

......


[affected_rows] => -1

ДОписываю: тут же не 1, а -1. Значит ошибка. Нужно использовать "симовлы привязки". Щас попробую... Все равно что-то не правильно я делаю.... :(

  Ответить  
 
 автор: root_xxx   (11.04.2016 в 21:26)   письмо автору
 
   для: Trianon   (11.04.2016 в 15:56)
 

>Вероятно, на смом деле Вы хотели присобачить не переменные параметров запроса,
>а переменные результата выборки.
>Ну так для этого применяется функция mysqli_bind_result()
---
Я хоЧУ чтобы select извлекал нечто из бд, но излекал это как СТРОКУ. А также запрос шел только с строковым параметром $login.

Первый пример с uid_users не удачный.

Зачем из бд извлекать некие данные так чтобы они были строкой?, думаю вы знаете лучше меня.
---
О символах привязки в официальн документации иныормации не видел :((. Пасиб.
---
УЖЕ РАЗОБРАЛСЯ. Сам уиноват :)
РАБОЧИЙ код тоже возвращает [affected_rows] => -1. Я же до fetch`a не доходил. Ориентировался на [affected_rows] => -1. Ошибок не ввыдавало никаких, но я то думал что ошибка.

  Ответить  
 
 автор: Trianon   (12.04.2016 в 02:24)   письмо автору
 
   для: root_xxx   (11.04.2016 в 21:26)
 

Select - не update и не insert . Он никакие строки не аффектит.

  Ответить  
 
 автор: root_xxx   (12.04.2016 в 03:05)   письмо автору
 
   для: Trianon   (12.04.2016 в 02:24)
 

>Select - не update и не insert . Он никакие строки не аффектит.
призабыл :( спс, что напомнили.

но ведь num_row =0 . то есть не равно, а показывает [num_rows] =0

Если спросить его (скл) то должен показать сколько строк вернул.
---
Ну вообщем я не в курсе почему после селекта affected = -1.

Нужно было до конца разбирать данные, чтобы понять есть они или нет, а я до этого не сразу дошел.

  Ответить  
 
 автор: root_xxx   (21.04.2016 в 18:43)   письмо автору
 
   для: Trianon   (12.04.2016 в 02:24)
 

...

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования