2011-06-01 107 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