Давайте сделаем вид, что у меня есть две таблицы в базе данных InnoDB: categories
и jokes
; и что я использую PHP/MySQLi, чтобы выполнить эту работу. Таблицы выглядеть так:mysqli, подготовленные заявления и INSERT-SELECTs
CATEGORIES
id (int, primary, auto_inc) | category_name (varchar[64])
============================================================
1 knock, knock
JOKES
id (int, primary, auto_inc) | category_id (int) | joke_text (varchar[255])
=============================================================================
empty
Благодаря previous ответ на здесь, я обнаружил, что вы можете сделать следующее, чтобы добавить новую шутку, состоящую из: $joke_text
, $category_id
.
INSERT INTO jokes (category_id, joke_text)
SELECT c.id, '$joke_text'
FROM categories AS c WHERE c.id = $category_id;
Это позволяет мне, без использования внешних ключей, чтобы быть уверенными, что значение $category_id
относится к существующей категории (игнорируйте вопрос о внешних ключах, так как мой вопрос призван помочь мне узнать " сложные "подготовленные заявления).
Так что это сработало просто отлично. Тем не менее, я сейчас пытаюсь выучить подготовленные заявления и, проведя весь день на этом, наконец, у меня есть основы. К сожалению, у меня есть АБСОЛЮТНО НЕТ ИДЕИ как выполнить вышеупомянутый SQL-запрос с подготовленными операциями в mysqli, и я не смог найти какую-либо информацию в Интернете относительно такой проблемы.
Если кто-нибудь может мне помочь, я был бы очень благодарен.
Не спасаясь данные POST с real_escape_string функции Mysqli побеждающей целью использования подготовленных инструкций? Вы используете подготовленные инструкции, чтобы пропустить этот шаг. Иначе вы бы хотели называть функцию addlashes, а затем избегать ее с помощью функции real_escape_string. Или это, по крайней мере, то, что я прочитал, когда сначала использовал MySQLi, прежде чем перейти к PDO. См. [Http://stackoverflow.com/questions/6232084/is-mysql-real-escape-string-necessary-when-using-prepared-statements](http://stackoverflow.com/questions/6232084/is-mysql -real-escape-string-needed-when-using-ready-statements) – Touch
Я согласен, это просто привычка :), которую можно безопасно удалить – skv
Двойное экранирование может привести к двум одинарным кавычкам при отправке.Вот где я вижу проблему безопасности. Лучше всего мы советуем, чтобы эта привычка была удалена. :) – Touch