Сегодня 13 июля, воскресенье ГлавнаяНовостиО проектеЛичный кабинетПомощьКонтакты Сделать стартовойКарта сайтаНаписать администрации
Поиск по сайту
 
Ваше мнение
Какой рейтинг вас больше интересует?
 
 
 
 
 
Проголосовало: 7281
Кнопка
BlogRider.ru - Каталог блогов Рунета
получить код
RMCreative.ru - Блог
RMCreative.ru - Блог
Голосов: 1
Адрес блога: http://rmcreative.ru/feed/
Добавлен: 2008-06-12 21:34:00 блограйдером ZaiSL
 

Несколько SQL-запросов за один раз через PDO

2011-06-24 03:37:21 (читать в оригинале)

Понадобилось исполнить несколько не однотипных запросов за один раз. Также, как это делает mysqli::multi_query, но через PDO. Сделать это, оказалось, вполне реально, но и без интересностей не обошлось.

Во-первых нагуглить это оказалось почему-то не так просто: вылезали какие-то обсуждения PDO_MYSQLND 2008-го года и, хоть и свежие, но оставшиеся без внятного ответа вопросы на StackOverflow.

Оказалось, что PDO_MYSQLND с релизом PHP 5.3 заменил PDO_MYSQL, который такие вещи не поддерживал. Причём заменил под тем же именем PDO_MYSQL.

Итого, для выполнения нескольких запросов за один раз понадобится:

  • PHP 5.3+
  • mysqlnd
  • Эмуляция prepared statement через PDO::ATTR_EMULATE_PREPARES, выставленный в 1 (по умолчанию) или, как альтернатива, не использование prepared statements и выполнение запроса напрямую через $pdo->exec.

Используем exec

$db = new PDO("mysql:host=localhost;dbname=test", 'root', '');
 
// работает как для реальных statement-ов, так и для эмуляции
$db->setAttribute(PDO::ATTR_EMULATE_PREPARES, 0);
 
$sql = "DELETE FROM car; INSERT INTO car(name, type) VALUES ('car1', 'coupe'); INSERT INTO car(name, type) VALUES ('car2', 'coupe');";
 
try {
    $db->exec($sql);
}
catch(PDOException $e)
{
    echo $e->getMessage();
    die();
}

Используем statement-ы

$db = new PDO("mysql:host=localhost;dbname=test", 'root', '');
 
// Не будет работать с реальными statement-ами. Только с эмуляцией.
// Строку ниже можно закомментировать, это умолчание
$db->setAttribute(PDO::ATTR_EMULATE_PREPARES, 1);
 
$sql = "DELETE FROM car; INSERT INTO car(name, type) VALUES ('car1', 'coupe'); INSERT INTO car(name, type) VALUES ('car2', 'coupe');";
 
try {
    $stmt = $db->prepare($sql);
    $stmt->execute();
}
catch(PDOException $e)
{
    echo $e->getMessage();
    die();
}



 


Самый-самый блог
Блогер Рыбалка
Рыбалка
по среднему баллу (5.00) в категории «Спорт»


Загрузка...Загрузка...
BlogRider.ru не имеет отношения к публикуемым в записях блогов материалам. Все записи
взяты из открытых общедоступных источников и являются собственностью их авторов.