2015-11-20 74 views
0

我正在做一个ajax调用PHP应该做2 SQL查询。该查询是这样的:mysqli_multi_query没有做任何事

$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入门到另一个表,然后从当前删除了它。

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

任何想法,为什么它不工作?

UPDATE:

我现在跟着链接,以防止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); 
?> 

它仍然没有工作。错在哪里?

+2

[你的脚本是在对SQL注入攻击的风险。(http://stackoverflow.com/questions/60174/how-can-我防止SQL注入在PHP中)你在做任何错误检查?如果不是,你看过错误日志吗? –

+0

请看看我的更新。我甚至有点奇怪,因为变量不能被用户改变。 –

+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."';"; 
+0

jep ...我已经做了一次这个错误...该死的下一次我必须考虑它。所以现在至少它正在发生一些事情,但第二个SQL查询不是被做出来的。我将仔细研究Jay Blanchard的评论链接。谢谢。 –

+1

这是一个奇妙的抓住那一个! –

+0

@MarcelWasilewski嘿男人!快乐,它为你工作!你介意选择这个作为你最初问题的答案,然后为你遇到的未来问题写一个新问题吗?通常,在堆栈中,答案与第一个问题有关,您不会用新问题修改问题,只会修改以添加详细信息。希望这是有道理的,一定要在这里评论链接到你的新问题,所以我可以看看! –