2014-02-11 49 views
-1

我有一個查詢來更新數據,如果它存在或插入新記錄。查詢也運行在for循環中:插入/更新mysql記錄查詢錯誤

$pname = $c_info['name']; 
    $cname = $model[$c_id]['name']; 

$iqs =" IF EXISTS (SELECT * FROM custom_question_details WHERE Quiz_id 
=$data[$i] and User_id=$user_id and Parent_Category='$pname' and 
Category_Name='$cname' and Score=$temp)  
UPDATE custom_question_details SET Quiz_id =$data[$i],User_id=$user_id, 
Parent_Category='$pname', Category_Name='$cname',Score=$temp 
ELSE 
insert into custom_question_details (User_id,Quiz_id,Parent_Category,Category_Name,Score) 
values (".$user_id.",".$data[$i].",'".$c_info['name']."','".$model[$c_id]['name']."','".$temp."')"; 

echo "<br>".$iqs; 

我通過在PHP腳本中執行某些計算來獲取變量值。

這些查詢有些錯誤。在回顯上述sql查詢時,也會打印此數據。

IF EXISTS (
SELECT * 
FROM custom_question_details 
WHERE Quiz_id =7 
AND User_id =3 
AND Parent_Category = 'Default for System' 
AND Category_Name = 'sample quiz question 1' 
)UPDATE custom_question_details SET Quiz_id =7,User_id=3,Parent_Category='Default for System',Category_Name='sample quiz question 1',Score='100' 

ELSE insert into custom_question_details (User_id,Quiz_id,Parent_Category,Category_Name,Score) values(3,7,'Default for System','sample quiz question 1','100') 

爲什麼我的查詢錯誤?我甚至嘗試過:

SELECT EXISTS (
SELECT * 
FROM custom_question_details 
WHERE Quiz_id =7 
AND User_id =3 
AND Parent_Category = 'Default for System' 
AND Category_Name = 'sample quiz question 1' 
)UPDATE custom_question_details SET Quiz_id =7,User_id=3, 
Parent_Category='Default for System',Category_Name='sample quiz question 1',Score='100' 
ELSE 
insert into custom_question_details  (User_id,Quiz_id,Parent_Category,Category_Name,Score) values(3,7,'Default for System','sample quiz question 1','100') 

...但它仍然不起作用。我哪裏出錯了?

+0

但這並沒有看起來像你做任何[SQL逃逸(http://bobby-tables.com/php)在一切都在這裏,可能有一些嚴重[SQL注入漏洞]。 [PDO不難學](http://net.tutsplus.com/tutorials/php/why-you-should-be-using-phps-pdo-for-database-access/),並提供了一個簡單,可靠向查詢添加數據的方式。像[PHP The Right Way](http://www.phptherightway.com/)這樣的指南概述了與數據庫連接時推薦的最佳實踐。 – tadman

+0

從[文檔](http://dev.mysql.com/doc/refman/5.6/en/if.html):「用於**存儲程序的'IF'語句**實現基本的條件構造。」這不是可以用於一般查詢的東西。 – tadman

回答

0

首先,IF條件的語法是這樣的:

IF EXISTS ([condition]) THEN [your code] ELSE [some other code] 

其次,我認爲你缺少的更新方法的一些括號。 第三,我不確定您是否可以在IF條件下使用多於一列。我需要再多研究一下。

也許你可以告訴我們你收到的確切錯誤?!

希望它能幫助, 丹尼斯Rendler

+1

PS:我強烈建議您查看PDO並開始使用預準備語句,不僅用於代碼可見性,還用於安全性。 – DenisR

+0

以下是MySQL文檔的鏈接:http://dev.mysql.com/doc/refman/5.5/en/if.html – DenisR

+0

1064 - 您的SQL語法錯誤;檢查與您的MySQL服務器版本相對應的手冊,以便在第1行中使用'IF EXISTS(SELECT * FROM custom_question_details WHERE Quiz_id = 7和User_id = 3')時使用的正確語法,這是執行查詢時得到的錯誤 – sujai