2016-09-21 62 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