2011-06-01 110 views
2

我有一个使用MySQL作为后端的PHP搜索建议脚本。我知道我的代码中有很多可用的代码,我只是想知道我能做些什么来使它更安全。保护PHP MySQL代码

这里是我的代码:

<?php 
$database=new mysqli('localhost','username','password','database'); 
if(isset($_POST['query'])){ 
    $query=$database->real_escape_string($_POST['query']); 
    if(strlen($query)>0){ 
     $suggestions=$database->query(
      "SELECT * FROM search WHERE name LIKE '%" . $query . 
      "%' ORDER BY value DESC LIMIT 5"); 
     if($suggestions){ 
      while($result=$suggestions->fetch_object()){ 
       echo '<a>'.$result->name.'</a>';      
      } 
     } 
    } 
} 
?> 
+0

你想让它更安全吗?由于您已经在逃避搜索字符串,因此您希望保护什么? – 2011-06-01 23:41:57

回答

4

其实有没有,考虑到你是在SQL

逃逸的唯一外部价值无论如何,我建议你使用PDO::prepare进行查询。去这里的更多资讯

http://it.php.net/manual/en/pdo.prepare.php

例子:

$sth = $dbh->prepare('SELECT * FROM article WHERE id = ?'); 
$sth->execute(array(1)); 
$red = $sth->fetchAll(); 
+0

@callum:lol停止删除您的所有评论XD – dynamic 2011-06-01 23:51:57

3

从我一些提示:

  • 使用PDO,
  • ,不要串联查询参数,使用预准备语句在PDO中,
  • 不要在SELECT语句中放入“*”,ge t只需要你需要的列,
  • 在PDO中使用fetchAll(),不要在while()循环中获取记录。
+0

为什么选择downvote? Downvoter,你能解释一下吗? – 2011-06-01 23:44:10

+0

我不是downvoter但我可以尝试解释为什么他们downvoted:OP问没有提示,但如果有vulernatibiles。他并没有要求PDO fetchAll都不能用SELECT *进行SQL优化。也许是这样 – dynamic 2011-06-01 23:47:32