pdo подготовить и выполнить в «один выстрел»?

Я выполняю много раз подготовленное заявление. Вот мой код ниже:

<?php
try
{
$dsn = 'mysql:host=localhost;dbname=test;charset=utf8';
$user = 'root';
$password = '';
$options = [];

$pdo = new PDO($dsn, $user, $password, $options);

$pdo->beginTransaction();

$stmt = $pdo->prepare("INSERT INTO user(name, surname, birthDate) VALUES (:name, :surname, :birthDate)");

for( $i = 0; $i < 1000000; $i++ )
{
$stmt->execute([
':name' => 'Doe',
':surname' => 'John',
':birthDate' => '1970-01-01'
]);
}

$stmt = null;

$pdo->commit();

$pdo = null;
}
catch( Exception $e )
{
die( $e->getMessage() );
}
?>

Этот код зациклится 1 000 000 раз и вставит пользователя в базу данных.

Что я понимаю, так это то, что PDO будет постоянно работать между сервером и базой данных для выполнения этих 1 000 000 выполнений.

Я нахожу это действительно тяжелым, когда дело доходит до тысяч строк. Так что я сделал что-то самостоятельно, используя обычные PDO::query() метод вместо подготовленного выражения, и вот как это выглядит:

<?php
try
{
$dsn = 'mysql:host=localhost;dbname=test;charset=utf8';
$user = 'root';
$password = '';
$options = [];

$pdo = new PDO($dsn, $user, $password, $options);

$pdo->beginTransaction();

$queries = 'INSERT INTO user(name, surname, birthDate) VALUES ';

for( $i = 0; $i < 1000000; $i++ )
{
$queries .= "('Doe, 'John', '1970-01-01'),";
}

$queries = rtrim( $queries, ',' );
$queries .= ";";

$pdo->query( $queries );

$pdo->commit();

$pdo = null;
}
catch( Exception $e )
{
die( $e->getMessage() );
}
?>

Этот скрипт выше уплотняет все необходимые запросы и отправляет их в базу данных в «один выстрел».

Вопрос

Можем ли мы сделать то же самое, но с готовым заявлением? Это было бы очень удобно, чтобы иметь возможность отправлять выполненные операторы за один раз, так как подготовленный запрос в лучшем случае лучше с точки зрения безопасности (если я использую метод запроса, мне придется вручную экранировать мои параметры …).

Очевидно, это сделает запрос быстрее.

0

Решение

Задача ещё не решена.

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

Других решений пока нет …

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