:-)
  • *nix, PHP, SQL 21.01.2010 No Comments

    Такая ошибка возникла у меня после перехода на PHP 5.3. Решение я нашел на http://stackoverflow.com, можете там посмотреть, чтобы узнать про эту ошибку более подробно. Выглядит она вот так:

    Warning: PDO::__construct() [pdo.--construct]: [2002] Invalid argument (trying to connect 
    via unix://) in /home/blah-blah-blah.php on line 9
     
    Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[HY000] [2002]
    Invalid argument' in /home/blah-blah-blah.php:9 Stack trace: #0
    /home/blah-blah-blah.php(9): PDO->__construct('mysql:host=localhost;dbname=db', 'USER', 
    'PASSWORD') #1 {main} thrown in /home/blah-blah-blah.php on line 9

    Решается она так: вместо localhost, при написании DSN для PDO пишите 127.0.0.1. А так же стоит указать путь к сокету MySQL в php.ini: pdo_mysql.default_socket=/var/run/mysqld/mysql.sock

    Tags: , , ,

  • SQL 01.12.2009 11 Comments

    Если вы хотите делать массовый апдейт в MySQL, то я могу вам предложить вот такой рецепт. Сначала вы создаете временную таблицу, циклом собираете массовый INSERT запрос и потом вставляете данные из временной таблицы в нужную. Выглядеть это может, например, так:

    CREATE TEMPORARY TABLE ids (value INT, url VARCHAR(255));
    INSERT INTO ids VALUES 
        (0, 'http://url1.ru'),
        (0, 'http://url2.ru'),
        (0, 'http://url3.ru');
    UPDATE blogs, ids SET my_value = ids.value WHERE blogs.url = ids.url;

    Поясню. Допустим, мне понадобилось обновить некое значение в таблице в соответствии с URL. Скажем, статистику интернет-магазинов. Я создал временную таблицу из тех значений, по котороым будет вестись поиск, и значений, которые я буду вставлять в нужную мне таблицу. Дальше, идет INSERT сразу нескольких строк. Его очень просто собирать в цикле из массива. Например вот так:

    $elements = array();
    foreach ($aray as $url => $value) {
        $elements[] = '('.$db->escape($value).', '.$db->escape($url).')';
    }
    $insert_string = implode(',', $elements);

    После чего, собственно апдейт со вставкой. Временная таблица исчезнет после окончания сессии БД. На то она и временная.

    Tags:

  • Сходил я тут на Sun Tech Days. Само мероприятие длится три дня, я пошел только на первый. Дальше напишу что там было и выложу фотки. Читать дальше...

    Tags: , ,