mysqli_multi_query没有做任何事情

时间:2015-11-20 13:47:02

标签: php mysql mysqli

我正在对一个应该执行2次SQL查询的PHP进行ajax调用。查询如下所示:

$sql = "UPDATE customers SET customers_newsletter=1 WHERE customers_id ='".$cid."'";
   $sql .= "INSERT INTO coupons (coupon_id, 
                                 coupon_type, 
                                 coupon_code,
                                 coupon_amount, 
                                 coupon_minimum_order, 
                                 coupon_start_date, 
                                 coupon_expire_date, 
                                 uses_per_coupon, 
                                 uses_per_user, 
                                 coupon_active) 
                         VALUES ('".$cid."',
                                 'NL_".$cid_substr."".$cid."',
                                 'F',
                                 '5.0000',
                                 '100.0000',
                                 '".date("Y-m-d H:i:s")."',
                                 '".$expiredate."',
                                 '1',
                                 '1',
                                 'Y'
                                )";
mysqli_multi_query($con,$sql);

在另一个php文件中,完全相同的代码已经工作了,我将sql条目复制到另一个表,然后将其从当前表中删除。

如果我只执行其中一个查询,但我需要让它们一起工作。

为什么它不起作用的任何想法?

更新

我现在在注释中跟踪了阻止sql注入的链接,现在我得到了以下代码:

<?php
$mysqli = new mysqli("server", "user", "pw", "db");

// TODO - Check that connection was successful.

$unsafe_variable = $_GET['cid'];

$stmt = $mysqli->prepare("INSERT INTO coupons (coupon_id) VALUES (?)");

// TODO check that $stmt creation succeeded

// "s" means the database expects a string
$stmt->bind_param("s", $unsafe_variable);

$stmt->execute();

$stmt->close();

$mysqli->close();


mysqli_close($con);
?>

它仍然无效。故障在哪里?

1 个答案:

答案 0 :(得分:3)

您当前正在运行的内容与:

相同
$sql = "UPDATE customers SET customers_newsletter=1 WHERE customers_id ='".$cid."' INSERT INTO coupons (coupon_id, 
                                 coupon_type, 
                                 coupon_code,
                                 coupon_amount, 
                                 coupon_minimum_order, 
                                 coupon_start_date, 
                                 coupon_expire_date, 
                                 uses_per_coupon, 
                                 uses_per_user, 
                                 coupon_active) 
                         VALUES ('".$cid."',
                                 'NL_".$cid_substr."".$cid."',
                                 'F',
                                 '5.0000',
                                 '100.0000',
                                 '".date("Y-m-d H:i:s")."',
                                 '".$expiredate."',
                                 '1',
                                 '1',
                                 'Y'
                                )";
mysqli_multi_query($con,$sql);

其中,如果您在第一次查询后立即注意到,它就会直接进入INSERT。如果您在任何可能导致SQL错误(或回显此处的sql错误)的情况下运行此操作,您可能会发现语法错误,因为UPDATE查询永远不会关闭。尝试在更新语句的末尾添加;,如下所示:

$sql = "UPDATE customers SET customers_newsletter=1 WHERE customers_id ='".$cid."';";