版本: v2.3.0
insert
向数据表插入一条或多条记录。
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() 的第三个参数传入。$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
]);
多次插入
您还可以在一次调用中插入多行。
$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 对象,因此您可以调用 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 函数,以应对更高级的用法。更多说明请参阅 raw 页面。$database->insert("account", [
"user_name" => "bar",
"uid" => Medoo::raw("UUID()")
]);