php - 转义 mysql 搜索字符串 php

标签 php jquery mysql ajax

我对涉及 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."%") );

更多信息:Are PDO statements automatically escaped?

关于php - 转义 mysql 搜索字符串 php,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15862480/

相关文章:

php - 从 SQL 表中提取照片和照片 ID,并将它们显示在 PHP 页面的列表中

php - 如何在 php html 的 IE 中启用多个图像文件选择?

javascript - 使用 Angular 切换或 Accordion 效果

javascript - Bootstrap 新手——需要弄清楚布局问题

php - 验证用户是否被禁止 PHP?

sql - 帮助编写一个 mysql 查询 - 这必须已经完成了 1000 次,但我正在努力..请帮助?

php - 为什么这段代码会对我的服务器性能产生如此负面的影响?

php - 奇怪的 CSS 菜单问题

jquery - 悬停元素 A,显示/隐藏元素 B

MySQL 列依赖于另一列