Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737 Форумы портала PHP.SU :: вопрос по mysqli_stmt_bind_param [2]
Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009 Откуда: Россия, Санкт-Петербург
Помог: 618 раз(а)
arimanecro пишет:
Вытекает след.вопрос: если препарированный запрос так удобен и безопасен, то почему не откажутся от mysqli_real_escape_string?
Вы ещё спросите, когда люди, наконец, насиловать mysql_query перестанут...
Зачем вообще эта функция сделана? Потому что когда mysqli делали (больше десяти лет назад уже релиз был!) - ещё надо было думать о древних версиях MySQL, которые препарированные запросы ещё не умели (то ли MySQL 3 версии, то ли ранние 4.х). А теперь не выкинешь, обратная совместимость же.
----- PostgreSQL DBA
arimanecro
Отправлено: 03 Октября, 2014 - 09:35:13
Частый гость
Покинул форум
Сообщений всего: 209
Дата рег-ции: Май 2014
Помог: 0 раз(а)
Мелкий благодарю за понятное разъяснение
п.с. не могу нажать кнопку спасибо, так как у меня недостаточное кол-во сообщений (Добавление)
поэксперементировал и немного в ступоре...
убрал и препарированный запрос и mysqli_real_escape
все слова которые имеют одинарную кавычку, не заносятся в БД это при том, что mysqli_affected_rows вернул true
а также, если введу, например: vasea; DROP TABLE users888
=====
ааа..понял, запрос из-за кавычки в логине становится некоррекнтым, но почему mysqli_affected_rows вернлу тру, если ничего не занеслось в БД?
и как мне правильно прописать в поле логина, инъекцию типа DROP TABLE users888
могу ли я НЕ использую привязку mysqli_stmt_bind_param($stmt, 's', $category);, выводить данные из запроса в цикле?
То есть, в запросе я выбрал всё, но на деле буду использовать, например 5 полей из 10, чтобы не перечислять все эти 10 наименований в mysqli_stmt_bind_result, использовать методу как в не препарированном запросе:
while($row = mysqli_fetch_assoc($q)) {
}
Сразу говорю, что так не прокатит:
убираем строчку mysqli_stmt_bind_param($stmt, 's', $category); и меняем на:
Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009 Откуда: Россия, Санкт-Петербург
Помог: 618 раз(а)
Возьмите лучше PDO. Там удобнее сделано многое.
----- PostgreSQL DBA
arimanecro
Отправлено: 10 Июня, 2015 - 17:17:47
Частый гость
Покинул форум
Сообщений всего: 209
Дата рег-ции: Май 2014
Помог: 0 раз(а)
Мелкий
до изучения ООП, я ещё не добрался, пока набиваю руку на процедурном стиле
Sail
Отправлено: 10 Июня, 2015 - 17:28:21
Участник
Покинул форум
Сообщений всего: 1131
Дата рег-ции: Февр. 2014
Помог: 57 раз(а)
arimanecro, загляните хотя-бы в описание этой функции, ознакомьтесь с примерами...
Подобные вопросы пропадут.
Мелкий
Отправлено: 10 Июня, 2015 - 17:28:28
Активный участник
Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009 Откуда: Россия, Санкт-Петербург
Помог: 618 раз(а)
И что?
Использование классов никак не мешает процедурному стилю программирования, равно как и языком без поддержки классов можно писать в объектном стиле.
----- PostgreSQL DBA
arimanecro
Отправлено: 10 Июня, 2015 - 17:50:59
Частый гость
Покинул форум
Сообщений всего: 209
Дата рег-ции: Май 2014
Помог: 0 раз(а)
Sail
я всегда, в первую очередь смотрю примеры в документации, потому что описание некоторых функций, не позволяет сразу понять, что там имеется в виду, а так, примеры помогают логически догнать смысл )
действительно, пропустил маленький параграф:
Цитата:
Связывает результаты подготовленного выражения с переменными, определенными с помощью mysqli_stmt_bind_result().
теперь понятно, что без mysqli_stmt_bind_result() никуда
arimanecro
Отправлено: 12 Июня, 2015 - 12:08:46
Частый гость
Покинул форум
Сообщений всего: 209
Дата рег-ции: Май 2014
Помог: 0 раз(а)
Сегодня столкнулся с такой непоняткой...в документации я не нашел ни слова про данный случай.
Получается в что после начала препарирования, нельзя использовать ВНУТРИ никакой запрос( как препарированный, так и не препарированный) ???
но, стоит теперь поднять второй запрос с циклом, выше строчки $stmt2 = mysqli_prepare($connection, $ico_query); и все работает.
Как это объяснить?
Спасибо.
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.