2016-09-21 33 views
0

嗨所以我有兩個文本輸入的形式,當用戶填寫它的數據插入到這樣一個數據庫..錯誤與SQL在PHP

$sql = "INSERT INTO $user (note_name, note_body, creation_date) 
     VALUES ('$name','$note','$date')"; 

但是我有一個問題當輸入撇號作爲文本輸入的一部分時,我得到「SQL語法錯誤」..我相信它將撇號作爲SQL查詢的一部分,對吧?所以說,如果我爲$ note變量輸入「Bob's Computer」,那麼「Bob's」中的撇號將關閉變量周圍的撇號?

有什麼辦法可以解決這個問題嗎?

+0

['mysqli_real_escape_string'(http://php.net/manual/en/mysqli.real-escape-string.php) –

+1

@PraveenKumar這不是真正的好建議。準備好的陳述將是一個更好的選擇 – Phil

+0

@我知道,但我不知道PS。 ':(' –

回答

0

您可能需要清理數據,然後再將其作爲查詢。即使輸入是惡意的,衛生處理也會避免這些問題。你需要在變量使用mysqli_real_escape_string這樣:

$name = mysqli_real_escape_string($conn, $name); 
$note = mysqli_real_escape_string($conn, $note); 
$date = mysqli_real_escape_string($conn, $date); 
$sql = "INSERT INTO `user` (`note_name`, `note_body`, `creation_date`) VALUES ('$name','$note','$date')"; 

而且,這是一件好事,把你的SQL查詢類似上面的方式,反引號包圍。我也覺得表是user而不是$user有問題?

注:Prepared statements真的比使用此功能更好。由於我不確定使用情況,因此我不會將其添加到我的答案中。

+1

謝謝Praveen :)我也會閱讀準備好的陳述以及..也是$用戶的目的,當用戶登錄在我將他們的用戶名保存爲$ user的情況下,表名與用戶名相同:) – Dfarrelly