2013-07-04 2 views
1

Я использую PHP 5.4.4 и MySQL 5.5.31 на Debian 6. Я следующий код:PDO MySQL сбой апач заявление выполнить

file_put_contents("dump.log", $check_username); // To ensure the variable is set, which it is 
$database->query('SELECT * FROM users WHERE username = :username', array(':username' => $check_username)); 
die("Query didn't crash"); 

Функция запроса здесь:

public function query($query, $bind = null) { 
    global $pdo; 
    /* Prepare Statment */ 
    try { 
     $this->statement = $this->pdo->prepare($query); 
    } 
    catch(Exception $e) { 
     echo "MySQL Exception -> " . $e->getMessage(); 
    } 
    /* Execute Query */ 
    return $this->statement->execute($bind); // Crash here 
} 

на данный момент apache2 аварий со следующей ошибкой и ничего не возвращает клиенту:

*** glibc detected *** /usr/sbin/apache2: free(): invalid pointer: 0x00007fb3b61dbbf8 *** 
======= Backtrace: ========= 
/lib/x86_64-linux-gnu/libc.so.6(+0x76d76)[0x7fb3b3840d76] 
/lib/x86_64-linux-gnu/libc.so.6(cfree+0x6c)[0x7fb3b3845aac] 
/usr/lib/php5/20100525/mysqlnd.so(_mysqlnd_pefree+0x4e)[0x7fb3ac14ac7e] 
/usr/lib/php5/20100525/mysqlnd.so(+0x2645f)[0x7fb3ac15e45f] 
/usr/lib/php5/20100525/mysqlnd.so(+0x278e0)[0x7fb3ac15f8e0] 
/usr/lib/php5/20100525/mysqlnd.so(+0x2614e)[0x7fb3ac15e14e] 
/usr/lib/php5/20100525/pdo_mysql.so(+0x4f7f)[0x7fb3a99b0f7f] 
/usr/lib/php5/20100525/pdo.so(+0xc39a)[0x7fb3abf2839a] 
/usr/lib/apache2/modules/libphp5.so(zend_objects_store_del_ref_by_handle_ex+0x293)[0x7fb3b0818d63] 
/usr/lib/apache2/modules/libphp5.so(zend_objects_store_del_ref+0x13)[0x7fb3b0818d83] 
/usr/lib/apache2/modules/libphp5.so(_zval_ptr_dtor+0x3a)[0x7fb3b07e312a] 
/usr/lib/apache2/modules/libphp5.so(zend_hash_destroy+0x38)[0x7fb3b07ffe88] 
/usr/lib/apache2/modules/libphp5.so(zend_object_std_dtor+0x2c)[0x7fb3b0812fbc] 
/usr/lib/apache2/modules/libphp5.so(zend_objects_free_object_storage+0x9)[0x7fb3b0813049] 
/usr/lib/apache2/modules/libphp5.so(zend_objects_store_free_object_storage+0x87)[0x7fb3b0818897] 
/usr/lib/apache2/modules/libphp5.so(+0x35668c)[0x7fb3b07e368c] 
/usr/lib/apache2/modules/libphp5.so(+0x3650b5)[0x7fb3b07f20b5] 
/usr/lib/apache2/modules/libphp5.so(php_request_shutdown+0x1da)[0x7fb3b0791a3a] 
/usr/lib/apache2/modules/libphp5.so(+0x40f35f)[0x7fb3b089c35f] 
/usr/sbin/apache2(ap_run_handler+0x70)[0x7fb3b4670ab0] 
/usr/sbin/apache2(ap_invoke_handler+0xce)[0x7fb3b467444e] 
/usr/sbin/apache2(ap_process_request+0x1c8)[0x7fb3b4682078] 
/usr/sbin/apache2(+0x52f28)[0x7fb3b467ef28] 
/usr/sbin/apache2(ap_run_process_connection+0x68)[0x7fb3b46786a8] 
/usr/sbin/apache2(+0x5b1b7)[0x7fb3b46871b7] 
/usr/sbin/apache2(+0x5b4ca)[0x7fb3b46874ca] 
/usr/sbin/apache2(ap_mpm_run+0xc24)[0x7fb3b4688154] 
/usr/sbin/apache2(main+0xb40)[0x7fb3b465ca90] 
/lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0xfd)[0x7fb3b37e8ead] 
/usr/sbin/apache2(+0x2fa29)[0x7fb3b465ba29] 

код работал на ветру ows с XAMPP и PHP 5.3.8, и единственное другое отличие в том, что мой Debian имеет MySQLnd, а локальный - нет. PDO сообщает, что его активным драйвером является mysql, но tracelog предлагает использовать собственный драйвер.

Некоторые поисковые запросы предполагают, что родной драйвер требует, чтобы результаты были очищены между запросами, однако я очень сомневаюсь, что это так, поскольку (а) apache падает при первом запросе, прежде чем есть какие-либо результаты, и (б) я попытался очистить их с помощью clearCursor и циклов выборки. Я также пробовал unset перед оформлением заявления.

Вопрос: Как исправить функцию запроса, чтобы предотвратить ее сбой сервера?

+0

Означает ли PDO ошибку? –

+0

Нет, это не так. Единственная ошибка, которая возникает, это tracelog apache crash. – 3ventic

ответ

0

После прочтения this great Q&A я заметил, что соединение PDO было установлено постоянным первоначальным разработчиком (который находится в проекте, но неактивен). Изменение array(PDO::ATTR_PERSISTENT => true, до array(PDO::ATTR_PERSISTENT => false, устраняло проблему.

+0

ошибка. какой точный ответ заставил вас думать, что это постоянная связь? И почему просто отключите его, а не настройте его правильно? –

+0

Принятый ответ заставил меня подумать, почему он был включен, и поскольку никто из нас не мог вспомнить, почему, я отключил его, и он начал работать. – 3ventic

+0

У меня возникло чувство, если вы настроите количество параллельных подключений в mysql и/или количестве потоков apache, это может решить проблему. –

Смежные вопросы