我刚开始使用 PDO 方法,现在我遇到了一个小问题。如果我创建一个将名字和姓氏插入数据库的表单,我可以使用以下代码插入所有类型的特殊字符:
try {
$db = new PDO('mysql:dbhost=' . $dbhost . ';dbname=' . $dbname, $dbuser, $dbpass);
$db -> exec("SET CHARACTER SET utf8");
} catch(PDOException $e) {
echo $e->getMessage();
}
$query = $db->prepare("INSERT INTO users(fname, lname) VALUES(:fname, :lname)");
$insert_array = array(
":fname" => $fname,
":lname" => $lname
);
$query->execute($insert_array);
$db = NULL;
我可以":;,-!"#¤%&&(%)?{][]}£$€{{{$@@_--"
毫无问题地插入,甚至插入 SQL 注入。但是当我尝试使用类似的代码更新数据库时,它确实接受所有类型的特殊字符,引号除外。这是为什么?我用来更新的代码是:
try {
$db = new PDO('mysql:dbhost=' . $dbhost . ';dbname=' . $dbname, $dbuser, $dbpass);
$db -> exec("SET CHARACTER SET utf8");
} catch(PDOException $e) {
echo $e->getMessage();
}
$query = $db->prepare("UPDATE users SET fname=:fname, lname=:lname WHERE userid=:userid");
$update_array = array(
":fname" => $fname,
":lname" => $lname,
":userid" => $_GET['userid']
);
$query->execute($update_array);
$db = NULL;
我很感激我能得到的所有帮助。
-=解决方案=-
我不得不使用htmlspecialchars()
“解码”字符串。像这样:
<form action="" method="post">
First name<br><input type="text" name="fname" value="'.htmlspecialchars($user['fname']).'">
Last name: <br><input type="text" name="lname" value="'.htmlspecialchars($user['lname']).'">
<input type="submit">
</form>
现在各种特殊字符都可以完美运行。感谢大家的帮助,真的很感激!:D