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

时间:2015-05-04 00:51:45

标签: mysql php prepared-statement

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

$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();
....

可以看出,这涉及无限数量的查询,因为每个row-insert都有自己的execute()。我试图减少查询的数量,我的目标是让一个循环为所有插入的记录创建一个INSERT查询。可能吗?没有准备好的声明,这很容易,我可以使它工作,但我迷失了准备。

1 个答案:

答案 0 :(得分:0)

足以将字符串与逗号(,)连接起来作为一个参数。

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