:-)
  • SQL 29.01.2010 No Comments

    Если у вас возникают ошибки при работе с SQLite, то вот у меня пара решений.

    Если у вас ошибка "Unable to open database file" и при этом база читается, даже если вы дали права файлу БД 0777, то вам еще надо дать права на запись папке, в которой лежит файл. Дело в том, что при открытии транзакции пишется файл dbfilename-journal. Так же под Windows эта проблема может означать наличие кириллических символов в пути к базе.

    Если вы по привычке написали ON DUPLICATE KEY UPDATE ..., и не понимаете в чем ошибка - обратитесь к официальному мануалу и просто измените INSERT на REPLACE, а "ON DUPLICATE..." сотрите.

    Tags: ,

  • *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:

  • SQL 23.02.2009 2 Comments

    Тем, кто изучает симфони известно, что админку часто делают через "generate:app backend". То есть мы создаем приложение внутри нашего проекта. Это прекрасно, но есть одно НО. Чтобы нам зайти в админку требуется писать http://project/backend.php/some-admin-pages. Можно конечно обьяснять заказчикам, что мол понимаете, это другое приложение внутри проекта, другой фронт-контроллер, так надо. Но лучше сделать иначе. Скажу сразу, этот метод взят с официального форума симфони. Но найти его проблематично.

    Метод таков:

    1. Создаем папку "admin" внутри папки "web". Копируем туда .htaccess из той же "web", и заменяем
      RewriteRule ^(.*)$ index.php [QSA,L]
      на
      RewriteRule ^(.*)$ ../backend.php [QSA,L]
    2. Идем в настройки роутинга для backend (app/backend/config/routing.yml) и добавляем папку /admin/ ко всем роутам. Например:

      # default rules
      homepage:
      url: /admin/
      param: { module: default, action: index }

    3. Меняем no_script_name на "on" в настройках backend (app/backend/config/settings.yml):
      prod:
      .settings:
      no_script_name: on
    4. Чистим кеш и заходим в папку: http://project/admin/ без проблем.

    Tags: , ,

  • SQL 12.11.2008 Комментарии отключены

    Эта статья была запощена на хабрахабр до появления этого блога. А теперь она обрела свой дом.

    Как-то заинтересовавшись SQLite я решил проверить, а не будет ли оно быстрее MySQL, или хотя бы равным по скорости. Читать дальше...

    Tags: ,