我在 PHP 中制作了一个简单的搜索脚本,用于搜索 mySQL 数据库并输出结果。这是如何工作的:
- 用户通过搜索表单搜索“jack's”。
- 我的 PHP 脚本
GET
是这个搜索,并对其进行清理。 - 然后脚本使用
SELECT
andLIKE
得到结果。 - 然后脚本将结果输出给用户。
- 最后,脚本告诉用户“jack 已返回 x 个结果”。在逃跑的帮助下。
我想问的是,我做得对吗?
这就是我之前SELECTING
从数据库中清理的方式:
if(isset($_GET['q'])){
if(strlen(trim($_GET['q'])) >= 2){
$q = trim(mysql_real_escape_string(addcslashes($_GET['q'], '%_')));
$sql = "SELECT name, age, address FROM book WHERE name LIKE '%".$q."%'";
}
}
这就是我在输出“jack's returned x results”之前逃脱的方式。
echo htmlspecialchars(stripslashes($q)) . " returned x results.";
这是正确的方法吗?
顺便说一句,我知道 PDO 和 mySQLi 是首选,因为它们通过使用准备好的语句来清理自己,但我对它们没有任何实际经验。但我很乐意看看,如果你们可以链接我一些新手教程/解释。此外,我听说了,magic_quotes
并且charset
可能以某种方式导致注射——这是正确的吗?