バージョン: v2.3.0
insert
1 つ以上のレコードをテーブルに挿入します。
insert($table, $values)
table [string]
対象のテーブル名。
values [array]
挿入されるデータ。
戻り値
[PDOStatement] 実行されたクエリの PDOStatement インスタンス。
$database->insert("account", [
"user_name" => "foo",
"email" => "foo@bar.com",
"age" => 25
]);
最後に挿入した ID
挿入した行の ID を取得するには、
insert() の後に id() を呼び出します。$database->insert("account", [
"user_name" => "foo",
"email" => "foo@bar.com",
"age" => 25
]);
$account_id = $database->id();
Oracle の場合は、
insert() の 3 番目のパラメータとして主キーを指定します。$database->insert("ACCOUNT", [
"NAME" => "foo"
], "ID");
$account_id = $database->id();
配列のシリアル化
デフォルトでは、配列値は挿入前に
serialize() でシリアル化されます。代わりに [JSON] を使用して、json_encode() とともに保存することもできます。$database->insert("account", [
"user_name" => "foo",
"email" => "foo@bar.com",
"age" => 25,
"lang" => ["en", "fr", "jp", "cn"] // => \'a:4:{i:0;s:2:"en";i:1;s:2:"fr";i:2;s:2:"jp";i:3;s:2:"cn";}\'
]);
$database->insert("account", [
"user_name" => "foo",
"email" => "foo@bar.com",
"age" => 25,
"lang [JSON]" => ["en", "fr", "jp", "cn"] // => \'["en","fr","jp","cn"]\'
]);
タイプの自動検出
Medoo は、より安全で効率的な書き込みを行うために、挿入前にデータ型を自動的に検出してバインドします。
class Foo {
var $bar = "cat";
public function __wakeup()
{
$this->bar = "dog";
}
}
$object_data = new Foo();
$fp = fopen($_FILES[ "file" ][ "tmp_name" ], "rb");
$database->insert("account", [
// 文字列値。
"user_name" => "foo",
// 整数値。
"age" => 25,
// 真偽値。
"is_locked" => true,
// 配列値。
"lang" => ["en", "fr", "jp", "cn"],
// JSON としてエンコードする配列値。
"lang [JSON]" => ["en", "fr", "jp", "cn"],
// オブジェクト値。
"object_data" => $object_data,
// ラージオブジェクト(LOB)。
"image" => $fp
]);
複数挿入
1 回の呼び出しで複数の行を挿入することもできます。
$database->insert("account", [
[
"user_name" => "foo",
"email" => "foo@bar.com",
"age" => 25,
"city" => "New York",
"lang [JSON]" => ["en", "fr", "jp", "cn"]
],
[
"user_name" => "bar",
"email" => "bar@foo.com",
"age" => 14,
"city" => "Hong Kong",
"lang [JSON]" => ["en", "jp", "cn"]
]
]);
PDOStatement
insert() は PDOStatement を返すため、そのメソッドを呼び出して詳細を確認できます。$data = $database->insert("account", [
"user_name" => "foo",
"email" => "foo@bar.com",
"age" => 25
]);
// 直前の SQL 文で影響を受けた行数を返します。
echo $data->rowCount();
// 参考: https://php.net/manual/en/class.pdostatement.php
SQL 関数の使用
より高度なケースでは、Raw オブジェクト経由で SQL 関数を使用できます。詳細は https://medoo.in/api/raw を参照してください。
$database->insert("account", [
"user_name" => "bar",
"uid" => Medoo::raw("UUID()")
]);