2014-11-16 75 views
2
$search = htmlspecialchars($_GET["s"]); 

if(isset($_GET['s'])) { 
// id index exists 
$wordarray = explode(" ",$search); 
$stringsearch = implode('%',$wordarray); 
echo $stringsearch; 
echo ","; 
$result = mysqli_fetch_array($conn->query("SELECT ID FROM table WHERE title LIKE '%$stringsearch%';")); 
if (!empty($result)) { 

echo sizeof($result); 

echo ","; 

數據庫有3行標題test,pest,嵌套對應的id爲1,2,3。當我請求domain.com/?s=est無法正確檢索索引mysqli

它回聲像這樣 EST,2,

現在,當我檢查$結果[0]和$結果[1],$結果[0]呼應和$ result [1]沒有迴應任何東西。當我使用foreach函數時,它只取值$ result [0]

並且$ result應該是所有三個索引的數組。

我找不到任何錯誤, 當我在SQL控制檯鍵入相同的命令它的工作原理,有人幫助我,在此先感謝。

+0

你的代碼很容易被sql注入 - 而htmlspecialchars在這裏是沒用的:) – Martin

+0

現在你能解釋一下如何去除sql漏洞嗎? @Martin – Harwee

+0

我會推薦使用準備好的語句,你也可以使用mysqli_real_escape_string – Martin

回答

1

問題是,如果你期待多行,那麼不這樣做:

$result = mysqli_fetch_array($conn->query("SELECT ID FROM table WHERE title LIKE '%$stringsearch%';")); 

這僅取第一行,你需要循環它提前一個指針,並獲得接下來的行集:

$result = $conn->query("SELECT ID FROM table WHERE title LIKE '%$stringsearch%' "); 

while($row = $result->fetch_array()) { 
    echo $row[0] . '<br/>'; 
    // or $row['ID']; 
} 

旁註:考慮使用預處理語句,因爲mysqli已經支持這個。

+0

Thanx @Ghost,它的工作原理,如果它不適合你,我會浪費時間:); – Harwee

+0

@Harwee肯定人我很高興這有助於 – Ghost

+1

或mysqli_real_escape_string現在:) –