->insert()

->insert() – 現在のオブジェクト変数をデータベースに挿入する

Synopsis

mixed $DB_DataObject->insert ( )

Description

現在のオブジェクトの偏す打ちに基づいたデータをデータベースに挿入し、 もし、シーケンスや主キーが使用される場合、挿入された要素のIDを返します。 値は完全にクオートされ、 いくつかの制限された型のチェックは行われています。

MySQLでは mysql_next_id() メソッドが使用され、 他のデータベースでは、PEAR DB の sequence メソッドが使用されます。

注意: insert() メソッドはいくつかの状況では ID を正しく返さないかも知れません。

  • データベースバックエンドがサポートしていない場合
  • 生成スクリプトが正しいカラムを自動インクリメント/nextvalとしてマークしなかった場合
  • 何らかのエラーが発生した場合 (デバッグモードで確認することができます)
  • 挿入に失敗、あるいは '0' 行に影響を与えた場合

Return value

mixed - Id あるいは キーを指定します。

Throws

Possible PEAR_Error values
エラーコード エラーメッセージ 意味 解決策
DB_DATAOBJECT_ERROR_INVALIDCONFIG "挿入:$table の定義がありません"    
DB_DATAOBJECT_ERROR_NODATA "挿入:クエリにデータが指定されていません"    
DB_* * PEAR::DB を参照してください PEAR::DB を参照してください

Note

This function can not be called statically.

Example

簡単な挿入

<?php
$person 
= new DataObjects_Person;
$person->name='fred';
$id $person->insert();
?>

結果の SQL

<?php
INSERT INTO person 
(nameVALUES ('fred');
?>
select count() リクエストを実行する (Previous) オブジェクト変数でデータベースを更新する (Next)
Last updated: Mon, 22 Dec 2014 — Download Documentation
Do you think that something on this page is wrong? Please file a bug report or add a note.
View this page in:

User Notes:

Note by: del@babel.com.au
Here is how to fetch the error message:

$my_id = $my_object->insert();
if ($my_id) {
debug("I just inserted record ID " . $my_id);
} else {
$error = &PEAR::getStaticProperty('DB_DataObject','lastError');
$debug("DB_DataObject Error: " . $error->getMessage() );
}
Note by: nailz420@gmail.com
Is there a way to get the database error code and message? For example, I would like to be able to check for error code 1062 on duplicate key error in a mysql db. Where would that value be stored?
Note by: Charlie Shin
I spent at least 3 days to find out why there is extra table with additional "_seq" in my database. I finally realize it is created because sequenceKey(). I don't know why bother to find sequenceKey() if my table is no need sequence key? This feature should not set by flag or option, otherwise I have to manually add in return array(false, false) each time after if package upgrade?
Note by: pierre2543@hotmail.com
By default insert() will populate key fields automatically. If you want to manage your own keys, override sequenceKey() in your DO as follows:

function sequenceKey(){
return array(false,false);
}