Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Warning: mysqli_stmt_bind_param(): Number of variables doesn't match number of parameters / 15 сообщений из 15, страница 1 из 1
11.04.2016, 14:26
    #39212560
aliskin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Warning: mysqli_stmt_bind_param(): Number of variables doesn't match number of parameters
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
11.04.2016, 14:33
    #39212569
SharuPoNemnogu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Warning: mysqli_stmt_bind_param(): Number of variables doesn't match number of parameters
aliskin,

может стоит написать mysqli_stmt_bind_param после объявления переменных?
...
Рейтинг: 0 / 0
11.04.2016, 14:52
    #39212607
aliskin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Warning: mysqli_stmt_bind_param(): Number of variables doesn't match number of parameters
строки
Код: 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
11.04.2016, 15:06
    #39212647
SharuPoNemnogu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Warning: mysqli_stmt_bind_param(): Number of variables doesn't match number of parameters
aliskin,

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

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

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


У меня появилась идея. я вечером перепишу, попробую и отпишусь.
...
Рейтинг: 0 / 0
11.04.2016, 21:35
    #39213059
aliskin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Warning: mysqli_stmt_bind_param(): Number of variables doesn't match number of parameters
дело тут в символах привязки (?)
---
вот пример получше:
Код: 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
11.04.2016, 21:37
    #39213060
aliskin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Warning: mysqli_stmt_bind_param(): Number of variables doesn't match number of parameters
SharuPoNemnogu,

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

Зачем из бд извлекать некие данные так чтобы они были строкой?, думаю вы знаете лучше меня.
...
Рейтинг: 0 / 0
11.04.2016, 22:51
    #39213093
aliskin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Warning: mysqli_stmt_bind_param(): Number of variables doesn't match number of parameters
"Я хоЧУ чтобы select извлекал нечто из бд," А также запрос шел только с строковым параметром $login.
...
Рейтинг: 0 / 0
11.04.2016, 23:51
    #39213110
SharuPoNemnogu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Warning: mysqli_stmt_bind_param(): Number of variables doesn't match number of parameters
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
12.04.2016, 00:31
    #39213118
aliskin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Warning: mysqli_stmt_bind_param(): Number of variables doesn't match number of parameters
???
Я добился что и у меня работает. Код именно такой как я хочу. Но почему оно работает??? Щас буду сравнивать каждый символ.
...
Рейтинг: 0 / 0
12.04.2016, 01:18
    #39213134
aliskin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Warning: mysqli_stmt_bind_param(): Number of variables doesn't match number of parameters
---
Хочу рассказать Зачем я так мучаюсь: Если случайно или неслучайно в бд попадут текстовые строки, который будут склинжектом, то при 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
12.04.2016, 01:22
    #39213135
aliskin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Warning: mysqli_stmt_bind_param(): Number of variables doesn't match number of parameters
вот вывод. наверное никому не итересен.
Код: 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
12.04.2016, 01:25
    #39213136
aliskin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Warning: mysqli_stmt_bind_param(): Number of variables doesn't match number of parameters
во как обрабатываеться одинарная кавычка. Уже легче. :)
Код: html
1.
2.
пароль для root11':
Почтов адр: 
...
Рейтинг: 0 / 0
12.04.2016, 10:16
    #39213282
SharuPoNemnogu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Warning: mysqli_stmt_bind_param(): Number of variables doesn't match number of parameters
mysqli.real-escape-string да и вообще в доке много всего интересного
...
Рейтинг: 0 / 0
12.04.2016, 15:27
    #39213757
aliskin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Warning: mysqli_stmt_bind_param(): Number of variables doesn't match number of parameters
SharuPoNemnogu,

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

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


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