Вставьте 500 строк в MySQL из массива PHP

codes Таблица

id     code
--    ------
1     BB3CA4
2     2788BA
3     E3E3A5
.        .
.        .
.        .

PHP массив из 500 полууникальных строк называется $codes быть добавленным к codes Таблица:

$codes = array( 'AC2BE4', 'BC61A2', '34CE5A', ... );

Мой объект подключения к базе данных PDO:

$dbh = new PDO( "mysql:host=$host;dbname=$db", $user, $pass );

Попробуй 1

Поместите вставку PDO в цикл PHP:

foreach( $codes as $code ){
$stmt = $dbh->prepare("INSERT INTO codes ( code ) VALUES ( :code )");
$stmt->bindParam( ':code', $code , PDO::PARAM_STR );
$stmt->execute();
}

Я думаю, что это не очень хорошее решение!

Попробуй 2

Вторая попытка состояла в том, чтобы создать длинный SQL-запрос, склеив 500 SQL-запросов и запустить его одновременно.

1

Решение

Подготовленные операторы, выполняющие один и тот же запрос, но с разными параметрами, не нужно создавать несколько раз, только один раз, поэтому создайте оператор перед циклом, затем выполните итерацию, вы свяжете параметры и выполните запрос внутри цикла.

$stmt = $dbh->prepare("INSERT INTO codes ( code ) VALUES ( :code )");
foreach( $codes as $code ){
$stmt->bindParam( ':code', $code , PDO::PARAM_STR );
$stmt->execute();
}

С PDO Вы даже можете немного уменьшить код, установив параметр / s в вызове execute:

$stmt = $dbh->prepare('INSERT INTO codes ( code ) VALUES ( :code )');
foreach($codes as $code) {
$stmt->execute(array('code' => $code));
}
3

Другие решения

 $sql = "INSERT INTO codes ( code ) VALUES ";
foreach($codes as $code){
$sql = $sql . "($code),"}
$sql = rtrim($sql,",");

Я думаю, что это простой способ вставить 500 значений одновременно в базу данных.

-1

По вопросам рекламы [email protected]