Я пытаюсь узнать, как использовать подготовленные операторы с MySQLi для вставки данных.
Несмотря на то, что подготовленные заявления приветствуются за их способность эффективно выполнять подобные заявления несколько раз, я не могу найти примеры выполнения нескольких операторов в цикле с использованием MySQLi. Меня особенно смущает следующее :
bind_param
перед моим циклом или внутри моего цикла bind_param
В большинстве руководств по подготовленным заявлениям используется PDO. С PDO массив значений параметров может быть передан для execute
, что устраняет необходимость вызова bindParam
. Это не относится к MySQLi.
В руководстве пользователя mysqli_prepare
есть пример, который показывает следующий порядок операций:
Судя по вышеизложенному, я предположил, что мне нужно будет вызвать оператор bind в моем цикле.
Однако в руководстве по mysqli_stmt_execute
есть пример, который показывает следующий порядок операций:
Обратите внимание, что одна вещь, которую этот пример не показывает, – это где сначала объявляются переменные. Я думал, что прохождение необъявленных переменных в bind_param
будет генерировать уведомление. Я, наконец, понял, что могу передавать неопределенные переменные, потому что они передаются по ссылке.
Вопрос :
Один порядок операций предпочтительнее другого? Или это просто зависит от того, что вы делаете? Есть ли какие-то проблемы с тем или другим?
Примечание . Код уже использует MySQLi, и я не хочу переключаться на PDO (теперь переключение выходит за рамки этого проекта).
Поскольку параметры передаются по ссылке , вы можете присваивать значения переменным до или после вызова bind_param
. В любом случае это сработает.
Если переменные были переданы по значению , вам нужно будет связывать их каждый раз, когда вы измените их значение. Но поскольку они передаются по ссылке, вам нужно только связать их один раз.
В случае одного выполнения порядок операций не имеет большого значения и может зависеть от того, откуда берутся значения. В случае цикла вы должны обязательно вызвать bind_param
перед циклом.