2010-08-05 80 views
0

時,這是我的代碼:錯誤插入SQL表PHP

function function() { 
$isbn = $_REQUEST["isbn"]; 
$price = $_REQUEST["price"]; 
$cond = $_REQUEST["cond"]; 

$con = mysql_connect("localhost","my_usernam", "password"); 
if (!$con) die('Could not connect:' . mysql_error()); 
mysql_select_db("my_database",$con); 

$sql="INSERT INTO 'Books' (isbn, price, condition) 
VALUES ('$isbn','$price','$cond')"; 


if (!mysql_query($sql,$con)) 
{ 
die('Error: ' . mysql_error()); 
} 

mysql_close($con); 
return "It works"; 

但運行時,它會導致:

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 ''Books' (isbn, price....

任何人都知道爲什麼發生這種情況?在反引號,不是報價

+0

如果你有一個SQL錯誤,最好的辦法通常是輸出你試圖在執行和嘗試「幹」查詢SQL工作表(如在phpMyAdmin中);如果它不能在那裏工作,你的問題是在SQL域中,你可以將PHP和連接問題弄糊塗了。 – lotsoffreetime 2010-08-05 19:42:00

回答

0

總結表名,並確保逃避你的輸入安全:

$sql="INSERT INTO `Books` (`isbn`, `price`, `condition`) 
VALUES ('" . mysql_real_escape_string($isbn) . "', 
     '" . mysql_real_escape_string($price) . "', 
     '" . mysql_real_escape_string($cond) . "')"; 
+0

對不起,我不知道你的意思 – Jake 2010-08-05 19:37:46

+0

我已經添加了代碼來顯示你。 – 2010-08-05 19:38:35

+0

,現在祈禱「條件」永遠不會成爲MySQL中的保留關鍵字;-) – mvds 2010-08-05 19:39:42

3

您應該使用反引號,而不是單引號表和字段名稱:

$sql="INSERT INTO `Books` (`isbn`, `price`, `condition`) 
    VALUES ('$isbn','$price','$cond')"; 

將工作。

ps。防止各種討厭的安全漏洞,逃避與輸入字段:

$isbn = mysql_real_escape_string($_REQUEST["isbn"]); 
// etc etc for all fields 
+0

真棒,感謝mvds! :) – Jake 2010-08-05 19:39:07

+1

請注意,在連接到數據庫之前,您將無法使用mysql_real_escape_string()。 – 2010-08-05 19:40:14

+0

優秀點Scott – mvds 2010-08-05 19:44:52