2013-10-08 118 views
-2

我試圖在php中通過mysql插入數據到表中,但我經常得到一個錯誤。我經歷了許多次代碼,似乎無法弄清楚是什麼原因造成的。 下面是代碼:MySQL語句沒有正確執行

$mysql_insert_vote = "INSERT INTO tb_votes VALUES ('$user_id','$get_award_id', 
'$vote_val'"; 

$conn->query($mysql_insert_vote) or die("SQL Error (INSERT): " 
.mysqli_error($conn)); 

useridawardidvote_val都具有正確的價值觀。我已經使用echo手動檢查過它們,但聲明本身不起作用。

代碼有什麼問題?

+4

請在編寫任何**更多SQL接口代碼之前,您必須閱讀[正確的SQL轉義](http://bobby-tables.com/php)以避免嚴​​重的[SQL注入漏洞]( http://bobby-tables.com/)。當使用'mysqli'時,您應該使用參數化查詢和['bind_param'](http://php.net/manual/en/mysqli-stmt.bind-param.php)將用戶數據添加到您的查詢中。 **從不**使用字符串插值來實現這一點。 – tadman

+2

您錯過了VALUES的右括號(...' –

+0

什麼是錯誤? – GolezTrol

回答

2

你的語句需要一個右括號

$mysql_insert_vote = "INSERT INTO tb_votes VALUES ('$user_id','$get_award_id','$vote_val')"; 

您還需要或者逃避你輸入或使用準備好的語句,以確保它不容易受到SQL注入

0

看你的代碼後,我有在第一行發現了一個錯誤,表明你錯過了右括號?你有沒有注意到這個錯誤?

$mysql_insert_vote = "INSERT INTO tb_votes VALUES ('$user_id','$get_award_id','$vote_val'"); 
$conn->query($mysql_insert_vote) or die("SQL Error (INSERT): ".mysqli_error($conn)); 

在未來,你可以使用諸如http://sqlfiddle.com/,以幫助您識別和構建SQL代碼。這些可用於很多不同的語言!

..和再次還需要要麼逃避你輸入或使用準備好的語句,以確保它不容易受到SQL注入

0

您在年底

$mysql_insert_vote = "INSERT INTO tb_votes VALUES ('$user_id','$get_award_id','$vote_val'"; 

還缺少一個括號,看起來你正試圖在引號中包含變量值($ user_id)。如果是這樣,這是不正確的。

直言:創建另一個變量,以便它包含引號「''」的$ user_id。

最簡單的調試方法是打印SQL Query字符串並使用Workbench或命令行編輯器在MYSQL中運行它。

我同意@tadman和@Machavity使用參數化查詢,而不是使用字符串表示。