挿入が失敗した後、insert_id()は何を返しますか?
4 に答える
使用するドライバーにもよると思います。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
データベースドライバ自体を見ると、の各バージョンは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;
ほとんどのcodeigniter関数は、提供する値がない場合、falseを返します。エラーのために指定するinsert_idがないため、insert_idは返されません。
データベースの挿入を実行する場合にのみIDを返します。
成功した場合は、前のクエリによってAUTO_INCREMENT列を生成します。失敗した場合は、0を返します。MySQL接続が確立されていない場合はFALSEを返します。