powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Warning: mysqli_stmt_bind_param(): Number of variables doesn't match number of parameters
15 сообщений из 15, страница 1 из 1
Warning: mysqli_stmt_bind_param(): Number of variables doesn't match number of parameters
    #39212560
aliskin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1 искал, читал, вникал, но :(
---
Пример вставки ( http://php.net/manual/ru/mysqli-stmt.bind-param.php),
переделанный под мою бд, работает:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
<?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));
//////////////
$rawdata=mysqli_prepare($ddb, "select regid from reg");
echo '<pre>';
print_r ($rawdata);
echo '</pre>';

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

mysqli_stmt_execute($rawdata);
///////////////////////

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

?>


отладка показывает
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
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 :
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
//Еще раз коннект  (но не помогло))
$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);
...
...



В итоге получается, :( что ничего не получается.
Код: php
1.
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 . До этого шага я дошел, дальше не знаю что и как.
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
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
)


---

тбл и данные:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
mysql> select uid_users from users;
+-----------+
| uid_users |
+-----------+
|        11 |
|        12 |
|        38 |
...
...

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

mysql> 



ВАЖНО! Если будете разъяснять что и почему, то пожалуйста, пишите в процедурном стиле.
...
Рейтинг: 0 / 0
Warning: mysqli_stmt_bind_param(): Number of variables doesn't match number of parameters
    #39212569
SharuPoNemnogu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aliskin,

может стоит написать mysqli_stmt_bind_param после объявления переменных?
...
Рейтинг: 0 / 0
Warning: mysqli_stmt_bind_param(): Number of variables doesn't match number of parameters
    #39212607
aliskin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
строки
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
//////////////
$rawdata=mysqli_prepare($ddb, "select regid from reg");
echo '<pre>';
print_r ($rawdata);
echo '</pre>';

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

mysqli_stmt_execute($rawdata);
///////////////////////


это мусор - не могу отредактировать сообщение.
...
Рейтинг: 0 / 0
Warning: mysqli_stmt_bind_param(): Number of variables doesn't match number of parameters
    #39212647
SharuPoNemnogu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aliskin,

возможно, потому что $uid забиндена, но не определена. А вообще зачем ее биндить, там же автоинкремент?
...
Рейтинг: 0 / 0
Warning: mysqli_stmt_bind_param(): Number of variables doesn't match number of parameters
    #39212724
aliskin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SharuPoNemnogu, да, там аутоинкр.

Это упрощенный учебный пример.

В каком месте нужно ее определять? перед mysqli_prepare...?
так тоде не работает. щас проверю.


У меня появилась идея. я вечером перепишу, попробую и отпишусь.
...
Рейтинг: 0 / 0
Warning: mysqli_stmt_bind_param(): Number of variables doesn't match number of parameters
    #39213059
aliskin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
дело тут в символах привязки (?)
---
вот пример получше:
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
$ddb = mysqli_connect('localhost', 'root', 'ubu14root', 'mbs');

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

$login = $_GET['login'];
//без проверок


$rawdata = mysqli_prepare($ddb, "select uid_users,md5psw from users where login_users='$login'");

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


mysqli_stmt_bind_param($rawdata, 's', $login);
echo '<pre>';
print_r($rawdata);
echo '</pre>';

mysqli_stmt_execute($rawdata);

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

exit;



Выдает:
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
mysqli_stmt Object
(
    [affected_rows] => 0
    [insert_id] => 0
    [num_rows] => 0
    [param_count] => 0
    [field_count] => 2
    [errno] => 0
    [error] => 
    [error_list] => Array
        (
        )

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


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 28

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

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

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

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


[affected_rows] => -1 - ошибочка. нужно использовать символы привязки.

и это ... для селекта есть bind_result.
...
Рейтинг: 0 / 0
Warning: mysqli_stmt_bind_param(): Number of variables doesn't match number of parameters
    #39213060
aliskin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SharuPoNemnogu,

---
Я хоЧУ чтобы select извлекал нечто из бд, но излекал это как СТРОКУ. Первый пример с uid_users не удачный.

Зачем из бд извлекать некие данные так чтобы они были строкой?, думаю вы знаете лучше меня.
...
Рейтинг: 0 / 0
Warning: mysqli_stmt_bind_param(): Number of variables doesn't match number of parameters
    #39213093
aliskin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
"Я хоЧУ чтобы select извлекал нечто из бд," А также запрос шел только с строковым параметром $login.
...
Рейтинг: 0 / 0
Warning: mysqli_stmt_bind_param(): Number of variables doesn't match number of parameters
    #39213110
SharuPoNemnogu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aliskin,

сто лет не писал процедурно и не работал с mysqli, тем не менее, уделив 3 минуты документации, у меня все работает. Что я делаю не так?

Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
$ddb = mysqli_connect('localhost', 'root', '', 'somedb');

$email = 'test@test.test';

$rawdata = mysqli_prepare($ddb, "select * from users where email= ?");

mysqli_stmt_bind_param($rawdata, 's', $email);
mysqli_stmt_execute($rawdata);

$result = mysqli_stmt_get_result($rawdata);

echo '<pre>';
var_dump(mysqli_fetch_all($result));
echo '</pre>';
die;
...
Рейтинг: 0 / 0
Warning: mysqli_stmt_bind_param(): Number of variables doesn't match number of parameters
    #39213118
aliskin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
???
Я добился что и у меня работает. Код именно такой как я хочу. Но почему оно работает??? Щас буду сравнивать каждый символ.
...
Рейтинг: 0 / 0
Warning: mysqli_stmt_bind_param(): Number of variables doesn't match number of parameters
    #39213134
aliskin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
---
Хочу рассказать Зачем я так мучаюсь: Если случайно или неслучайно в бд попадут текстовые строки, который будут склинжектом, то при select я хотел бы извлекать данные только как строки. Первый пример был про это, хоть там извекалось число.

Но для этого bind_param не годен ??? (ваш код буду изуать!)

Ну и при сравнительных селектах (с уловием) всегда нужно быть бдительным.
---
такой вот рабочий код:
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
$ddb = mysqli_connect('localhost', 'root', 'ubu14root', 'mbs');

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

$login = $_GET['login'];
//без проверок


/* создаем подготавливаемый запрос */
if ($rawdata = mysqli_prepare($ddb, "SELECT md5psw,mail_users FROM users WHERE login_users=?")) {

echo 'prepare<pre>';
print_r($rawdata);
echo '</pre>';

    /* связываем параметры с метками */
    mysqli_stmt_bind_param($rawdata, "s", $login);
echo 'bind<pre>';
print_r($rawdata);
echo '</pre>';

    /* запускаем запрос */
    mysqli_stmt_execute($rawdata);
echo 'exec<pre>';
print_r($rawdata);
echo '</pre>';

    /* связываем переменные с результатами запроса */
    mysqli_stmt_bind_result($rawdata, $md5psw,$mail_users);
echo 'bind_res<pre>';
print_r($rawdata);
echo '</pre>';

    /* получаем значения */
    mysqli_stmt_fetch($rawdata);
echo 'fetch<pre>';
print_r($rawdata);
echo '</pre>';

    printf("пароль для %s: %s\n", $login, $md5psw);
    echo "<br>Почтов адр: $mail_users";
    

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

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

exit;



ВСЕ! МОГУ только поржать (ну не плакать же мне). РАБОЧИЙ код тоже возвращает [affected_rows] => -1 .

Я же до fetch`a не доходил. Ориентировался на [affected_rows] => -1. Ошибок не ввыдавало никаких, но я то думал что ошибка.

Теперь еще один вопрос: Как узнать сколько запрос вернул строк? (если [affected_rows] => -1) Или при использовании num_row affected_row это можно будет узнать? нужно проверить.

---
Почему я не могу редактировать свои сообщения? Или эта функ будет доступна после написания определенного числа сообщений?
...
Рейтинг: 0 / 0
Warning: mysqli_stmt_bind_param(): Number of variables doesn't match number of parameters
    #39213135
aliskin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вот вывод. наверное никому не итересен.
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
prepare

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

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

bind

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

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

exec

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

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

bind_res

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

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

fetch

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

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

пароль для root11: 1111
Почтов адр: bbbb@dfg.trrrfgyhj
...
Рейтинг: 0 / 0
Warning: mysqli_stmt_bind_param(): Number of variables doesn't match number of parameters
    #39213136
aliskin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
во как обрабатываеться одинарная кавычка. Уже легче. :)
Код: html
1.
2.
пароль для root11':
Почтов адр: 
...
Рейтинг: 0 / 0
Warning: mysqli_stmt_bind_param(): Number of variables doesn't match number of parameters
    #39213282
SharuPoNemnogu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mysqli.real-escape-string да и вообще в доке много всего интересного
...
Рейтинг: 0 / 0
Warning: mysqli_stmt_bind_param(): Number of variables doesn't match number of parameters
    #39213757
aliskin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SharuPoNemnogu,

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

И еще одно замечанние (МНЕ от МЕНЯ) select не трогает affected_row.
---
Есть еще вопросы, НО сначала хочу сам разобраться. А то что бы было если бы я написал в этой теме, что "такой-то код выдает варинг..."? Никто не стал бы читать такую тему.
...
Рейтинг: 0 / 0
15 сообщений из 15, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Warning: mysqli_stmt_bind_param(): Number of variables doesn't match number of parameters
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]