Intereting Posts
Разбор чрезвычайно больших XML-файлов в php Слияние двух mp3-плееров Получение необработанной строки запроса SQL из подготовленных операторов PDO PHP – поиск элемента по объекту из массива объектов найти и заменить ключевые слова гиперссылками в html-фрагменте, через php dom Как передать переменную php в ajax Как установить значение multi select из объекта массива в yii2 при обновлении PHP превращает PM и AM в 24 часа wp_schedule_event не стреляет Есть ли лучший способ обрабатывать 300 000 строк текстовых файлов и вставлять их в MySQL? Неопределенная переменная: _SESSION при отправке переменных через сообщение через триггер JavaScript Невозможно ли доступ к элементам в ассоциативных массивах PHP численно (то есть по индексу)? Использование PHP для загрузки изображения и хранения данных в MSSQL Если вы очистите содержимое (ob_flush) запроса AJAX, содержимое загрузится? Как переписывать URL в PHP?

Mysqli и привязка нескольких наборов значений во время вставки

Надеюсь, кто-то может дать мне некоторое представление здесь.

Когда вам нужно вставить сразу несколько строк в таблицу, я использовал sql, который выглядит примерно так:

INSERT INTO some_names (firstName, lastName) VALUES ('Joe', 'Smith'),('Fred','Sampson'),('Lisa','Pearce')

Как вы можете видеть, я вставляю три строки с одним утверждением. Причина, по которой я делаю это, – это то, что я считаю, что это более эффективно, чем выполнение трех разных операторов для вставки строк.

Поэтому мой вопрос заключается в следующем: как это сделать, если я хочу привязать свои значения к заявлению? К сожалению, я смотрел по всему Интернету, и я могу найти только пример одиночных заявлений в форме:

 $stmt = $mysqli->prepare("INSERT INTO some_names (firstName, lastName) VALUES (?, ?)"); $stmt->bind_param('ss', $firstName, $lastName); $firstName = "Joe"; $lastName = "Smith"; $stmt->execute(); $firstName = "Fred"; $lastName = "Sampson"; $stmt->execute(); 

Похоже, что это будет эквивалентно выполнению отдельных инструкций INSERT и, как представляется, менее эффективно.

Поэтому мой вопрос: есть ли способ привязки в инструкции multi-insert? Пожалуйста, просветите меня здесь! благодаря

Просто:

 $stmt = $mysqli->prepare("INSERT INTO some_names (firstName, lastName) VALUES (?, ?),(?,?),(?,?)") $stmt->bind_param('ssssss', 'Joe', 'Smith','Fred','Sampson','Lisa','Pearce'); 

Похоже, что это будет эквивалентно выполнению отдельных инструкций INSERT и, как представляется, менее эффективно.

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

Вы смотрите на это неправильно.

Вы почти никогда не будете делать то, что вы показали выше, это почти всегда будет сделано в цикле. И даже если вы динамически построили (?, ?), (?, ?), (?, ?) Вам все равно придется зацикливать, чтобы построить строку запроса и привязать данные (что еще более усложнилось бы из-за смехотворного сопротивления MySQLi на привязках by-ref), поэтому он не принесет вам ничего с точки зрения работы, которую должен выполнить PHP – вы только что переместили цикл – и это потеряло бы многого с точки зрения удобочитаемости.

У этого есть выигрыш в круглых поездках в базу данных (при условии, что вы всегда вставляете более одной строки), но это только имело бы значимую разницу при вставке сотен или тысяч или строк, и в этом случае вы, скорее всего, выполняете какие-то в этом случае лишние пары секунд, вероятно, не имеют значения (это не будет, например, замедлять загрузку страницы).