<rmcreative>

RSS

Все заметки с тегами «php, SQL»

Можно уточнить:

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

    24 июня 2011

    Понадобилось исполнить несколько не однотипных запросов за один раз. Также, как это делает 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();
    }
    9 комментариев
  2. Импорт больших SQL-дампов через PHP

    27 мая 2011

    Основная проблема при импорте большого SQL-дампа — нехватка памяти при чтении всего дампа. Решение очевидно: грузить в память только то, что нужно в данный момент.

    $f = @fopen("path/to/dump.sql", "r");
    if($f)
    {
        $q = '';
     
        while(!feof($f))
        {
            // читаем построчно в буфер $q      
            $q .= fgets($f);
     
            // пока не упрёмся в ;
            if(substr(rtrim($q), -1) == ';')
            {
                // выполяем запрос
                execute_sql($q);
     
                // обнуляем буфер
                $q = '';
            }
        }
    }
    20 комментариев
  3. Doctrine 2

    22 декабря 2010

    Вышел релиз Doctrine 2 — передового PHP ORM и слоя абстракции данных.

    Официальный анонс

    2 комментария
  4. О скорости WordPress и как её увеличить

    24 ноября 2008

    О «прекрасном» коде WordPress, его производительности и варианте починки всего этого безобразия.

    Читаем и патчим

    3 комментария
  5. Как разбить данные на страницы (PHP+MySQL)

    29 ноября 2007

    Поможет новичкам понять азы постраничной разбивки.

    Читаем

    Комментировать
  6. SQL Server 2005 Driver для PHP

    16 октября 2007

    Microsoft зарелизили PHP-драйвер под SQL Server 2005.

    • Работает только Windows, требует наличия MS SQL Server Native Client.

    • Является отдельным драйвером (не PDO).

    • Исходного кода естественно нет. Также отстутствует какая-либо спецификация протокола.

    • Неплохое описание API с примерами.

    • Поддерживает параметризированные запросы и потоки данных.

    В phpinfo показывается как: sqlsrv, sqlsrv support enabled.

    Знакомимся

    Оригинал заметки

    Комментировать