【发布时间】:2015-10-23 15:41:14
【问题描述】:
我正在使用 PDO 从 MySQL 数据库中获取结果,并使用来自 $_GET 请求方法的值作为条件。一切正常,但如果 $_GET 值中有任何句号(点),MySQL 将返回 0 行。
这是我的示例:
<?php
function filter($val) {
$f = htmlentities($val);
$f = filter_input(INPUT_GET, $f);
return strip_tags($f);
}
$dev = filter("dev");
function DevFetch($dev) {
$q = $this->link->prepare("SELECT app FROM table WHERE dev = ?");
$q->bindValue("1", $dev);
$q->execute();
if($q->rowCount() > 0) {
return $q->fetchAll();
} else {
return false;
}
}
?>
这里有一些例子。
案例一:
results.php?developer=Google+Inc // works fine
案例 2:
results.php?developer=Google // works fine
案例 3:
results.php?developer=Google+Inc. // doesn't work with dot at the end
请帮忙。请注意,我正在编码(urlencode())$_GET 值以及使用filter_input() 函数对其进行过滤。没有过滤/编码也不行。
【问题讨论】:
-
使用参数化查询而不是过滤输入...
-
the query fails和returns 0 rows之间也有区别。返回 0 行的查询有效,只是没有找到任何匹配的内容。 -
@andrewsi 谢谢你的澄清
-
是否有匹配
results.php?developer=Google+Inc.的记录? -
那么你的代码在哪里??