我对涉及 PHP/MySql 搜索表单的最佳实践有疑问
考虑以下因素:
- 用于搜索书名的搜索表单
- “自动建议”标题的 jQuery/AJAX 请求
- 需要逃跑以及如何逃跑?
连接数据库的mysql用户只有SELECT
目前有特权,但我可能会添加 INSERT
future 的特权(因此有可能进行注入(inject))。
搜索表单很简单,例如:
<form id="search" method="GET" action="/search/">
<input type="text" value="" id="s" name="s" />
</form>
表单通过 GET 发送至 search.php?s=Search Query
。到达那里后,PHP 文件如下所示:
<?php
$s = $_GET['s']; // the search request
$search = new Search($s); // creates new search object and sends the $s query
echo $search->output; // returns results
?>
我的搜索类具有以下内容:
class Search {
// Database stuff omitted
$stmt->bindParam(':search', $this->query, PDO::PARAM_STR)
$stmt->execute;
$res = $stmt->fetchAll(PDO::FETCH_ASSOC);
$this->output = $res;
}
我的sql查询是这样的:SELECT booktitle FROM books WHERE booktitle LIKE '%:search%'
我可能会遇到什么问题?对于需要转义的内容以及在哪里转义,您有什么建议吗?您发现我的设置存在潜在问题吗?诸如 sql 注入(inject)之类的问题?
最佳答案
参数会在准备好的 PDO 语句中自动转义,您做得对。
请注意,您的查询中不需要引号:
$stmt = $myPDO->prepare("SELECT booktitle FROM books WHERE booktitle LIKE :search");
$stmt->bindParam(':search', "%".$this->query."%", PDO::PARAM_STR);
$stmt->execute();
或者更简单:
$stmt = $myPDO->prepare("SELECT booktitle FROM books WHERE booktitle LIKE ?");
$stmt->execute( array("%".$this->query."%") );
关于php - 转义 mysql 搜索字符串 php,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15862480/