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."';";
我正在对 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."';";