php mysqli_multi_query()在第一次查询后停止插入

时间:2016-07-22 17:44:49

标签: php mysql mysqli-multi-query

我尝试使用mysqli_multi_query函数在同一个表中插入多行,但它只执行第一个查询。我已经尝试将值添加到由逗号分隔的第一个查询的末尾,但似乎没有任何效果。有什么建议吗?

我已切换到预备语句,但仍然只插入了第一个结果。我错过了什么吗?

$DBConnect = mysqli_connect("localhost", "root", "", "getpressed");

if ($DBConnect->connect_error) {
die("Connection failed: " . $DBConnect->connect_error);

}

$stmt = $DBConnect->prepare("INSERT INTO orderdetails (orderID, productID, quantity) VALUES (?, ?, ?)");
$stmt->bind_param("iii", $orderID, $productID, $quantity);

$orderID = $orderID;
$productID = 1;
$quantity = $sportShirtQuantity;
$stmt->execute();

$orderID = $orderID;
$productID = 2;
$quantity = $sportCoatQuantity;
$stmt->execute();

echo "New records created successfully";

$stmt->close();
$DBConnect->close();

3 个答案:

答案 0 :(得分:1)

我在orderID上有一个主键索引,它不允许我插入具有相同orderID的多个行。我是个白痴。感谢大家的帮助。使用tadman建议的准备语句可以更好地工作。

答案 1 :(得分:-2)

我稍微更改了你的代码

$mysqli = new mysqli("localhost", "root", "", "getpressed");

if ($mysqli->connect_errno) {
    die("Connection failed: " . $mysqli->connect_error);
}

$sql = "INSERT INTO orderdetails (orderID, productID, quantity) VALUES ('".$orderID."', 1, '".$sportShirtQuantity."');";
$sql .= "INSERT INTO orderdetails (orderID, productID, quantity) VALUES ('".$orderID."', 2, '".$sportCoatQuantity."');";

if ($mysqli->multi_query($sql))) {
    echo "New records created successfully";
} else {
    echo "Error: " . $sql . "<br>" . mysqli_error($mysqli);
}
do {
    if ($res = $mysqli->store_result()) {
        var_dump($res->fetch_all(MYSQLI_ASSOC));
        $res->free();
    }
} while ($mysqli->more_results() && $mysqli->next_result());

我还强烈建议您将来使用PDO预备语句。

答案 2 :(得分:-3)

从最后一个语句中删除分号。该文档指出,此方法的分号用于连接语句,而不是结束语句。

请阅读此处的文档:Link

$sql = "INSERT INTO orderdetails (orderID, productID, quantity) VALUES ('".$orderID."', 1, '".$sportShirtQuantity."');";
$sql .= "INSERT INTO orderdetails (orderID, productID, quantity) VALUES ('".$orderID."', 2, '".$sportCoatQuantity."')";