JA 日本語
バージョン: v2.3.0

insert

1 つ以上のレコードをテーブルに挿入します。

insert($table, $values)
戻り値
[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()")
]);