mysql_insert_id () возвращает 0 - PullRequest
7 голосов
/ 23 ноября 2011

Я знаю, что есть много тем с одинаковым названием.Но в основном это запрос, который был вставлен не в том месте.Но я думаю, что все правильно расставил.Так что проблема в том, что я все еще получаю 0, даже когда данные вставлены в БД.Кто-нибудь знает ответ, где я могу ошибаться?

вот мой код:

mysql_query('SET NAMES utf8');
    $this->arr_kolommen = $arr_kolommen;
    $this->arr_waardes = $arr_waardes;
    $this->tabel = $tabel;
    $aantal = count($this->arr_kolommen);
    //$sql="INSERT INTO `tbl_photo_lijst_zoekcriteria` ( `PLZ_FOTO` , `PLZ_ZOEKCRITERIA`,`PLZ_CATEGORIE`)VALUES ('$foto', '$zoekje','$afdeling');";
    $insert = "INSERT INTO ".$this->tabel." ";
    $kolommen = "(";
    $waardes = " VALUES(";
    for($i=0;$i<$aantal;$i++)
    {
        $kolommen .=$this->arr_kolommen[$i].",";
        $waardes .="'".$this->arr_waardes[$i]."',";
    }
    $kolommen = substr($kolommen,0,-1).")";
    $waardes = substr($waardes,0,-1).")";
    $insert .=$kolommen.$waardes;   
    $result = mysql_query($insert,$this->db)  or die ($this->sendErrorToMail(str_replace("  ","",str_replace("\r\n","\n",$insert))."\n\n".str_replace(" ","",str_replace("\r\n","\n",mysql_error()))));
    $waarde = mysql_insert_id();

Заранее большое спасибо, потому что я уже сломал голову за это почтивесь день.(и, вероятно, это что-то маленькое и глупое)

Ответы [ 4 ]

13 голосов
/ 23 ноября 2011

Согласно руководству mysql_insert_id возвращает:

Идентификатор, сгенерированный для столбца AUTO_INCREMENT по предыдущему запросу в случае успеха, 0, если предыдущий запрос не создаетзначение AUTO_INCREMENT или FALSE, если не установлено соединение MySQL.

Поскольку оно не дает false и неправильное число, это указывает на то, что запрашиваемая таблица не сгенерировалаавтоинкрементное значение.

Есть две возможности, о которых я могу подумать:

  1. Ваша таблица не имеет поля auto_increment
  2. Поскольку вы не предоставляете ссылку на mysql_insert_id() но используя ссылку с mysql_query (), это может быть неверная таблица, запрашиваемая при получении последнего вставленного идентификатора.

Решение:

  1. Убедитесь, что оно имеетполе auto_increment
  2. Укажите ссылку: $waarde = mysql_insert_id($this->db);
0 голосов
/ 22 октября 2015

Codeigniter имеет странное поведение при вызове mysql_insert_id ().Функция возвращает 0 после первого вызова.Таким образом, его повторный вызов вернет 0.

Используйте переменную вместо вызова функции несколько раз:

$id = mysql_insert_id();
0 голосов
/ 22 июля 2015

Если для идентификатора действительно задано автоматическое приращение, и он все равно получает «0», так как ваш ответ делает подсчет столбцов и значений, я испытал это только позже, я заметил, что число моих столбцов не соответствует количеству значений.

0 голосов
/ 02 февраля 2015

Возможно, ваш запрос INSERT не был успешным - например, возможно, вы пытались вставить повторяющиеся данные в столбец, данные которого должны быть уникальными?

...