mysqli_multi_query 什么都不做

mysqli_multi_query not doing anything

我正在对 PHP 进行 ajax 调用,它应该执行 2 SQL 查询。查询如下所示:

$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 条目复制到另一个 table,然后将其从当前条目中删除。

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

知道为什么它不起作用吗?

更新:

我现在按照 link 在评论中防止 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);
?>

还是不行。错在哪里?

您目前的 运行 与:

相同
$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."';";