2013-11-01 78 views
3

好的,等回來,after my initial question。然而這一次,我實現了一個錯誤回調只是爲了幫助跟蹤我這裏,我給兩個密碼,並錯誤回調:MySQLi數據庫查詢錯誤

$Query = mysqli_query($Connection, "INSERT INTO database (ip, isp, user) VALUES ('$IP', '$ISP', '$User')"); 

這裏的錯誤:

Error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'database (ip, isp, user) VALUES ('184.107.171.51', 'AS32613 iWeb Technologies In' at line 1

任何關於這裏發生了什麼的線索?今天早些時候,我解決了老問題,然後在嘗試添加以檢查數據庫中是否存在該值之後,它開始執行此操作。

任何幫助,無論是消極或積極的,非常感謝,謝謝。

+1

感謝誰發佈,你不應該刪除它,它解決了我的問題。謝謝! – user2943677

+0

對不起,編輯剛剛刪除了重音字符,這是必要的。請現在嘗試我新編輯的聲明。 – grobmotoriker

回答

6

好,「數據庫」是MySQL中的保留關鍵字 - 嘗試:

 
$Query = mysqli_query($Connection, "INSERT INTO `database` (`ip`, `isp`, `user`) VALUES ('$IP', '$ISP', '$User')"); 

口音字符用來逃避可能的關鍵字。但是,當使用mysqli_query而不是mysql_query時,我建議使用Bill的方法。

+1

它現在也正常提交,非常感謝。 – user2943677

+0

+1你刪除了你的答案,然後你在我寫答案時恢復了答案。你應該先獲得回答。 –

+0

謝謝,但插入查詢的東西是一個很好的補充,恕我直言,評價+1 – grobmotoriker

3

在錯誤的上下文中使用MySQL reserved word會導致解析器出現模糊和混亂。例如,單詞DATABASE是一個保留字。

您可以使用保留字作爲標識符來區分它們(請注意,您不能在大多數其他編程語言中這樣做)。在MySQL中,使用back-ticks作爲分隔符不是單引號!

$Query = mysqli_query($Connection, "INSERT INTO `database` (ip, isp, user) 
    VALUES ('$IP', '$ISP', '$User')"); 

請注意USER不是保留字。你不需要劃定它,但它沒有任何傷害。

PS:這與您的問題沒有直接關係,但請了解如何使用prepared queries,而不是將PHP變量直接插入到您的SQL字符串中。

$Query = mysqli_prepare($Connection, "INSERT INTO `database` (ip, isp, user) 
    VALUES (?, ?, ?)"); 
$Query->bind_param("sss", $IP, $ISP, $User); 
+1

感謝您的提示:P – user2943677