0

我对涉及使用 PHP/MySql 的搜索表单的最佳实践有疑问

考虑以下:

  • 用于搜索书名的搜索表单
  • 对“自动建议”标题的 jQuery / AJAX 请求
  • 需要逃跑怎么办?

连接到数据库的 mysql 用户目前只有该SELECT权限,但我INSERT将来可能会添加该权限(因此可能会注入)。

搜索表单很简单,例如:

<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注入等问题?

4

1 回答 1

2

参数在准备好的 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."%") );

更多信息:PDO 语句是否自动转义?

于 2013-04-07T13:51:43.073 回答