使用php的MySQLi查询 - 查询字符串包含单引号和大括号

时间:2015-05-31 10:55:01

标签: php mysql mysqli

我正在编写一个php脚本,将字典文件放入Mysql数据库。它工作正常,但在某些情况下,定义字符串包含单引号和多组花括号。这是失败的定义字符串之一。

  

(n)(1){运动}带回球/将球带回自己的球   位置(橄榄球)/(2){econ}携带/携带扣除或   从前一年到当年的信贷(减少所得税)

这是** MySQLi **错误消息:

  

您的SQL语法有错误;检查手册   对应于您的MySQL服务器版本,以便使用正确的语法   近在咫尺(橄榄球)/(2)econ',{'(n)(1){sports}   带回来带来'在第1行

以下是有关定义字符串的脚本部分:

$definition = substr($definition_string, 0, $pos);

$definition = substr($definition, 1);

// Escape single quote
$definition = str_replace(["'"], "''" , $definition);

$mysqli->set_charset("utf8");

$result = $mysqli->query("INSERT INTO dict (entry, reading, category, definition, entry_number) VALUES ('$entry', '$reading', '$category', '$definition', '$entry_number')");   

我无法弄清楚为什么失败并且错误消息没有多大帮助。有什么想法吗?

1 个答案:

答案 0 :(得分:1)

我建议您阅读此here。他们提供了几种不同的方法来保护进入数据库的数据。

以下是众多方法之一:

$result = $mysqli->query("INSERT INTO dict (entry, reading, category, definition, entry_number) VALUES (
'" . $mysqli->escape_string($entry) . "',
'" . $mysqli->escape_string($reading) . "',
'" . $mysqli->escape_string($category) . "',
'" . $mysqli->escape_string($definition) . "',
'" . $mysqli->escape_string($entry_number) . "')");

另一个更有说服力的解决方案:

$stmt = $mysqli->prepare("INSERT INTO dict (entry, reading, category, definition, entry_number) VALUES (
?, ?, ?, ?, ?)");
$stmt->bind_param('sssss', $entry, $reading, $category, $definition, $entry_number);
$stmt->execute();
$result = $stmt->get_result();