用撇号发布数据

时间:2013-03-30 19:39:51

标签: php mysql

我是PHP的完全初学者,但已经管理了一个简单的代码来将数据输入到表中。

代码是:

$query = "INSERT into $table (suggestion1) VALUES('$suggestion1')";

一切正常,但如果插入的数据包含撇号(例如不包含),则查询失败。

我搜索了几个小时,但我得到的答案是我所不知道的。 任何帮助或指针都会很棒!

史蒂芬

2 个答案:

答案 0 :(得分:2)

您应该查看的是准备好的语句,在其中使用参数编写查询,以及调用准备语句传递参数值并让驱动程序进行替换/转义。 Here's a good starting point using mysqli

以下是来自PHP.net的简化代码示例:

$mysqli = new mysqli("example.com", "user", "password", "database");

/* Prepared statement, stage 1: prepare */
if (!($stmt = $mysqli->prepare("INSERT INTO test(id) VALUES (?)"))) {
    echo "Prepare failed: (" . $mysqli->errno . ") " . $mysqli->error;
}

/* Prepared statement, stage 2: bind and execute */
$id = 1;
if (!$stmt->bind_param("i", $id)) {
    echo "Binding parameters failed: (" . $stmt->errno . ") " . $stmt->error;
}

if (!$stmt->execute()) {
    echo "Execute failed: (" . $stmt->errno . ") " . $stmt->error;
}

答案 1 :(得分:1)

您想要转义输入:查看documentation

基本上,会发生这样的事情:当你用引号输入数据时,你会得到:

  INSERT INTO $table (suggestion1) VALUES ('it's great');

并且MySQL与第二个引用相混淆。当你“逃避”时,你会得到这个:

  INSERT INTO $table (suggestion1) VALUES ('it\'s great');

并且MySQL知道第二个引用是数据的一部分,而不是查询。

Wikipedia也有相关信息(更广泛,但值得阅读和理解)。