我是PHP
的完全初学者,但已经管理了一个简单的代码来将数据输入到表中。
代码是:
$query = "INSERT into $table (suggestion1) VALUES('$suggestion1')";
一切正常,但如果插入的数据包含撇号(例如不包含),则查询失败。
我搜索了几个小时,但我得到的答案是我所不知道的。 任何帮助或指针都会很棒!
史蒂芬
答案 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也有相关信息(更广泛,但值得阅读和理解)。