mysql_insert_id () перестал работать после обновления PHP - PullRequest
3 голосов
/ 10 февраля 2011

Я готовлюсь обновить живой веб-сервер с PHP 5.2.12 до 5.3.5. В процессе подготовки я выполнил обновление на втором сервере, который является зеркалом живого сервера (сервер «dev»). Оба сервера используют FreeBSD, и оба используют порты для установки PHP и MySQL. Живой сервер использует MySQL 5.0.89, недавно обновленный dev-сервер использует 5.1.54.

Следующий код выполняется должным образом на реальном сервере (PHP 5.2.12 / 5.0.89), возвращая значение только что вставленной строки AUTO_INCREMENT. Эта функция является частью класса базы данных, который используется по всему сайту, где «$ this -> _ private ['cn']» - ссылка на ресурс.

 public function insert ($sql=false) {
    @mysql_select_db($this->_private['db_name'],  $this->_private['cn']);
    $res = null;            
    if (false !== $sql) {
        $query_obj = mysql_query($sql, $this->_private['cn']);
        if ($query_obj)
            $res = mysql_insert_id($this->_private['cn']);
    }
    return $res;
}

На сервере dev (5.3.5 / 5.1.54) возврат равен нулю. Примечание - не нуль (который возвращается в случае сбоя запроса), но НОЛЬ Я могу посмотреть на таблицу и убедиться, что новая строка действительно вставлена, а поле автоинкремента правильно перешло. Значение поля в настоящее время 121288, поэтому оно находится в пределах целочисленного диапазона PHP. Я даже заново создал код класса на простой странице и получил тот же результат. mysql_error () указывает на отсутствие сбоев. Отчет об ошибках установлен на E_ALL, а не на писк.

ARGH! Есть идеи?

1 Ответ

1 голос
/ 10 февраля 2011

см. Эту ошибку , которая рекомендует следовать вашему запросу с SELECT LAST_INSERT_ID()

...