Intereting Posts

Когда я вызываю bind_param, если вы используете подготовленные команды MySQLi в цикле?

Я пытаюсь узнать, как использовать подготовленные операторы с MySQLi для вставки данных.

Несмотря на то, что подготовленные заявления приветствуются за их способность эффективно выполнять подобные заявления несколько раз, я не могу найти примеры выполнения нескольких операторов в цикле с использованием MySQLi. Меня особенно смущает следующее :

  • следует ли вызывать bind_param перед моим циклом или внутри моего цикла
  • следует ли присваивать значения моим переменным до или после вызова bind_param

В большинстве руководств по подготовленным заявлениям используется PDO. С PDO массив значений параметров может быть передан для execute , что устраняет необходимость вызова bindParam . Это не относится к MySQLi.

В руководстве пользователя mysqli_prepare есть пример, который показывает следующий порядок операций:

  1. присваивать значения переменным
  2. подготовить заявление
  3. связывать переменные
  4. выполнять
  5. Закрыть

Судя по вышеизложенному, я предположил, что мне нужно будет вызвать оператор bind в моем цикле.

Однако в руководстве по mysqli_stmt_execute есть пример, который показывает следующий порядок операций:

  1. подготовить заявление
  2. связывать переменные
  3. присваивать значения переменным
  4. выполнять
  5. присваивать значения переменным
  6. выполнять
  7. Закрыть

Обратите внимание, что одна вещь, которую этот пример не показывает, – это где сначала объявляются переменные. Я думал, что прохождение необъявленных переменных в bind_param будет генерировать уведомление. Я, наконец, понял, что могу передавать неопределенные переменные, потому что они передаются по ссылке.

Вопрос :
Один порядок операций предпочтительнее другого? Или это просто зависит от того, что вы делаете? Есть ли какие-то проблемы с тем или другим?

Примечание . Код уже использует MySQLi, и я не хочу переключаться на PDO (теперь переключение выходит за рамки этого проекта).

Поскольку параметры передаются по ссылке , вы можете присваивать значения переменным до или после вызова bind_param . В любом случае это сработает.

Если переменные были переданы по значению , вам нужно будет связывать их каждый раз, когда вы измените их значение. Но поскольку они передаются по ссылке, вам нужно только связать их один раз.

В случае одного выполнения порядок операций не имеет большого значения и может зависеть от того, откуда берутся значения. В случае цикла вы должны обязательно вызвать bind_param перед циклом.