以下是$ message内容的示例:
String(108)“\ n cc je t'aienvoy inune a plus:p \ n”
以下是错误消息:
致命错误:在非对象上调用成员函数setFetchMode() 在第101行的B:\ wamp \ www \ messages.php
我的请求不起作用:
$resultats = $connexion->query("SELECT * FROM messages WHERE message LIKE '%$message%'");
$resultats->setFetchMode(PDO::FETCH_OBJ);
$occurences= $resultats->rowCount();
为什么这个有效? (我用a改变了$ message):
$resultats = $connexion->query("SELECT * FROM messages WHERE message LIKE '%a%'");
$resultats->setFetchMode(PDO::FETCH_OBJ);
$occurences= $resultats->rowCount();
答案 0 :(得分:1)
尝试使用PDO准备。这几乎等同于mysql_real_escape_string()。这可能会消除由于特殊字符引起的大多数(如果不是全部)错误。
答案 1 :(得分:1)
简单地使用与mysql_*
相同的技术使用PDO对您没有任何好处,您需要利用其parameterized queries:
$query = $connexion->prepare("SELECT * FROM messages WHERE message LIKE ?");
$query->setFetchMode(PDO::FETCH_OBJ);
if($query->execute(array('%'.$message.'%'))) {
// process
}
else {
// only for debugging purposes, not a live app
var_dump($connexion->errorInfo());
}
它执行所有必要的自动和正确的转发,您通过execute()
方法传递参数。
至于I used addslashes
:不安全。使用如上所示的准备好的陈述。
除非您正在生成SQL - 实际的SQL逻辑,而不是用用户生成的内容填充空白 - 否则永远不会在SQL中需要PHP变量。