0

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

代码是:

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

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

我已经搜索了几个小时,但我得到的答案超出了我的知识范围。任何帮助或指示都会很棒!

史蒂文

4

2 回答 2

2

您应该查看的是准备好的语句,其中使用参数编写查询,以及调用准备好的语句传递参数值并让驱动程序进行替换/转义。这是使用 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;
}
于 2013-03-30T20:02:13.697 回答
1

你想逃避你的输入:检查文档

基本上,发生的事情是这样的:当你把数据加上引号时,你会得到:

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

MySQL 对第二个引用感到困惑。当您“逃脱”时,您会得到以下信息:

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

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

维基百科也有关于它的信息(更广泛,但值得阅读和理解)。

于 2013-03-30T19:42:07.083 回答