mysql - 使用Prepared语句对多条记录进行单个INSERT查询

标签 mysql php prepared-statement

这是一个相当基本的 PHP PDO 片段,它访问名为“Users”的 MySQL 表并使用准备好的语句和多个绑定(bind)向其中插入数据行:

$conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);

// prepare sql and bind parameters
$stmt = $conn->prepare("INSERT INTO Users (firstname, lastname, email) 
VALUES (:firstname, :lastname, :email)");
$stmt->bindParam(':firstname', $firstname);
$stmt->bindParam(':lastname', $lastname);
$stmt->bindParam(':email', $email);

// insert a row
$firstname = "John";
$lastname = "Doe";
$email = "john@example.com";
$stmt->execute();

// insert another row
$firstname = "Mary";
$lastname = "Moe";
$email = "mary@example.com";
$stmt->execute();
....

可以看出,这涉及无限数量的查询,因为每个行插入都有自己的execute()。我正在尝试减少查询数量,我的目标是让单个循环为所有插入的记录创建单个 INSERT 查询。是否可以?如果没有准备好的声明,这很容易,我可以让它工作,但我迷失了准备。

最佳答案

用逗号 (,) 连接字符串即可充当一个参数。

$stmt->bindParam(':firstname', $firstname[0] . ',' . $firstname[1]);

关于mysql - 使用Prepared语句对多条记录进行单个INSERT查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30027296/

相关文章:

mysql - Rails 何时使用 BEGIN 和 COMMIT 包装插入?

MySQL错误代码1248

php - 使用多个关键字进行搜索

php - 如何在 CS CART 中创建和执行 SQL 查询?

php - 如果值存在于 mysql 表中,则选中复选框

php - 一次从两个表中选择多个值

mysql - 尝试使用存储过程在 MySQL 中创建 PIVOT,不会添加仅包含空记录的列

mysql - 如何将日期时间字段分配给变量

PHP - 从函数返回数组

php - mysqli 准备不返回表中的结果