3

挿入が失敗した後、insert_id()は何を返しますか?

4

4 に答える 4

10

使用するドライバーにもよると思います。mysqlの場合、関数定義は次のとおりです。

/**
* Insert ID
*
* @access   public
* @return   integer
*/
function insert_id()
{
    return @mysql_insert_id($this->conn_id);
}

今読んでいるmysql_insert_id

mysql_insert_id(PHP 4、PHP 5)最後のクエリで生成されたIDを取得します

パラメータ:
resource $link_identifier[オプション]

戻り値:
タイプ:int

説明:成功時に前のクエリによってAUTO_INCREMENT列に対して生成されたID。前のクエリがAUTO_INCREMENT値を生成しない場合は0、MySQL接続が確立されていない場合はfalse。

1.-したがって、ID、0(ゼロ)またはfalseを返す可能性があります。
2.-そして、あなたがそれを要求すると、failed insertそれは0(ゼロ)を返すはずです。


PHP関数at sign (@)によって返されるエラーメッセージを無視するエラー演算子があることに注意してください。mysql_insert_id

于 2012-05-08T18:10:09.790 に答える
3

データベースドライバ自体を見ると、の各バージョンはinsert_id、基盤となるデータベースに応じて異なる方法で実装されています。たとえば、MySQLinsert_id関数は単なるラッパーでmysql_insert_idあり、次を返します。

成功時に前のクエリによってAUTO_INCREMENT列に対して生成されたID。前のクエリがAUTO_INCREMENT値を生成しない場合は0、MySQL接続が確立されていない場合はFALSE。

一方、postgres関数は明示的にIDを返します(ただし、クエリ自体が失敗した場合は例外がスローされる可能性があります)。

    $query = $this->query($sql);
    $query = $query->row();
    return (int) $query->ins_id;
于 2012-05-08T17:57:38.313 に答える
1

ほとんどのcodeigniter関数は、提供する値がない場合、falseを返します。エラーのために指定するinsert_idがないため、insert_idは返されません。

于 2012-05-08T17:47:43.490 に答える
1

データベースの挿入を実行する場合にのみIDを返します。

成功した場合は、前のクエリによってAUTO_INCREMENT列を生成します。失敗した場合は、0を返します。MySQL接続が確立されていない場合はFALSEを返します。

于 2012-05-08T17:50:59.870 に答える