2015-11-20 73 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嘿男人!快樂,它爲你工作!你介意選擇這個作爲你最初問題的答案,然後爲你遇到的未來問題寫一個新問題嗎?通常,在堆棧中,答案與第一個問題有關,您不會用新問題修改問題,只會修改以添加詳細信息。希望這是有道理的,一定要在這裏評論鏈接到你的新問題,所以我可以看看! –