【问题标题】:Cannot save data containing apostrophe to MySQL database无法将包含撇号的数据保存到 MySQL 数据库
【发布时间】:2012-10-05 15:25:38
【问题描述】:

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

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

【问题讨论】:

  • 如果您使用准备好的语句,您将完全回避这个问题。您已经在使用支持它们的 mysqli。
  • 这不是人们应该回避的问题,它是理解引用标准的基础。
  • 显示生成的查询。 $ucom0 不可能导致这种情况,所以很可能是 $uincrease0
  • 你能给我一些示例代码吗?真的很感激。

标签: php mysql database escaping


【解决方案1】:

带有撇号的数据会提前关闭 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']);

【讨论】:

  • 在这一行上,我的 Dreamweaver 给了我错误:$ucom0= mysqli->real_escape_string($_POST['com0']);
猜你喜欢
  • 1970-01-01
  • 2023-03-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多