web-dev-qa-db-ja.com

mysql_insert_id()は0を返します

同じタイトルのトピックがたくさんあることは知っています。しかし、ほとんどの場合、間違った場所に挿入されたのはクエリです。しかし、私はそれを正しく配置したと思います。したがって、問題は、データがデータベースに挿入された場合でも、まだ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();

ほぼ一日中、これに頭を悩ませてきたので、事前に感謝します。 (そしておそらくそれは小さくて愚かなものです)

9
user750079

manual によると、mysql_insert_idは次を返します。

前のクエリが成功したときにAUTO_INCREMENT列に対して生成されたID、0(前のクエリがAUTO_INCREMENT値を生成しない場合)、またはMySQL接続がない場合はFALSE設立された。

falseが表示されず、正しい数値が表示されないため、クエリされたテーブルが自動インクリメント値を生成しなかったことを示します。

私が考えることができる2つの可能性があります:

  1. テーブルにauto_incrementフィールドがありません
  2. Mysql_insert_id()へのリンクを提供しないが、mysql_query()とのリンクを使用するため、最後に挿入されたIDを取得するときに照会されるのは正しいテーブルではない可能性があります。

解決:

  1. Auto_incrementフィールドがあることを確認してください
  2. リンクも提供します:$waarde = mysql_insert_id($this->db);
14
Marcus

INSERTクエリが成功しなかった可能性があります-たとえば、データが一意である必要がある列に重複データを挿入しようとしていた可能性がありますか?

0

Codeigniterは、mysql_insert_id()を呼び出すときに奇妙な動作をします。この関数は、最初の呼び出しの後に0を返します。したがって、2回呼び出すと0が返されます。

関数を何度も呼び出す代わりに、変数を使用します。

$id = mysql_insert_id();
0
user5475008

IDが実際に自動インクリメントに設定されていて、応答が列と値のカウントを実行しても「0」を取得する場合は、後でこれを経験しましたが、列のカウントの数が値のカウントと一致しないことに気付きました。

0
kay