无法将包含撇号的数据保存到MySQL数据库

时间:2012-10-05 15:25:39

标签: php mysql database escaping

当我尝试使用撇号提交数据时出现问题,将无法保存到数据库中。

com0是我的表单字段。

$ucom0= mysqli_real_escape_string($_POST['com0']);

$AddQuery = "INSERT INTO database(feed1,comp1) VALUES ('".$ucom0."','".$uincrease0."')"; 

这是错误:

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 's

1 个答案:

答案 0 :(得分:3)

带撇号的数据会过早地关闭SQL语句。这很糟糕,可以对SQL注入开放。你应该真的使用prepared statements。但是,可以使用mysqli_real_escape_string

但是这不起作用的原因是因为mysqli_real_escape_string在您按程序调用它时需要两个参数(与已弃用的mysql_real_escape_string())不同;

$ucom0= mysqli_real_escape_string($link, $_POST['com0']);

其中$link是从连接到数据库时返回的变量:

$link = mysqli_connect("databasehost", "username", "password", "database");

如果您使用基于对象的mysqli进行连接,则会有所不同:

$mysqli = new mysqli("databasehost", "username", "password", "database");
$ucom0 = $mysqli->real_escape_string($_POST['com0']);