|
|
|
| 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>
|
ВАЖНО! Если будете разъяснять что и почему, то пожалуйста, пишите в процедурном стиле. | |
|
|
|
|
|
|
|
для: 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() | |
|
|
|
|
|
|
|
для: Trianon
(11.04.2016 в 15:56)
| | та да, bind_result - как раз для селекта.
---
вот переписал (тоже без знаков ?). Оно тоже выдает warng.
[affected_rows] => -1
ДОписываю: тут же не 1, а -1. Значит ошибка. Нужно использовать "симовлы привязки". Щас попробую... Все равно что-то не правильно я делаю.... :( | |
|
|
|
|
|
|
|
для: Trianon
(11.04.2016 в 15:56)
| | >Вероятно, на смом деле Вы хотели присобачить не переменные параметров запроса,
>а переменные результата выборки.
>Ну так для этого применяется функция mysqli_bind_result()
---
Я хоЧУ чтобы select извлекал нечто из бд, но излекал это как СТРОКУ. А также запрос шел только с строковым параметром $login.
Первый пример с uid_users не удачный.
Зачем из бд извлекать некие данные так чтобы они были строкой?, думаю вы знаете лучше меня.
---
О символах привязки в официальн документации иныормации не видел :((. Пасиб.
---
УЖЕ РАЗОБРАЛСЯ. Сам уиноват :)
РАБОЧИЙ код тоже возвращает [affected_rows] => -1. Я же до fetch`a не доходил. Ориентировался на [affected_rows] => -1. Ошибок не ввыдавало никаких, но я то думал что ошибка. | |
|
|
|
|
|
|
|
для: root_xxx
(11.04.2016 в 21:26)
| | Select - не update и не insert . Он никакие строки не аффектит. | |
|
|
|
|
|
|
|
для: Trianon
(12.04.2016 в 02:24)
| | >Select - не update и не insert . Он никакие строки не аффектит.
призабыл :( спс, что напомнили.
но ведь num_row =0 . то есть не равно, а показывает [num_rows] =0
Если спросить его (скл) то должен показать сколько строк вернул.
---
Ну вообщем я не в курсе почему после селекта affected = -1.
Нужно было до конца разбирать данные, чтобы понять есть они или нет, а я до этого не сразу дошел. | |
|
|
|
|
|
|
|
для: Trianon
(12.04.2016 в 02:24)
| | ... | |
|
|
|