我正在对一个应该执行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);
?>
它仍然无效。故障在哪里?
答案 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."';";