2017-04-22 64 views
0

我有我的數據庫中的類別列表,我在下拉菜單中填充。該網站應該能夠顯示項目取決於用戶選擇的類別。MySQL查詢選擇具有特定項目的行

我現在的編碼:

if ($selected_cat == "All Item" || !isset($selected_cat)) { 
    $sql_select = "SELECT * FROM tblproduct"; 
} 
else { 
    $sql_select = "SELECT * FROM tblproduct WHERE prodCat = '$selected_cat'"; 
} 
$result = $conn->query($sql_select); 

if ($result->num_rows > 0){ 
    while($row = mysqli_fetch_assoc($result)) 
    { 
     extract($row); 
     // some statement to display item 
    } 
} 

所以這裏的問題是,我的一些category's valueapostrophic(')Woman's Fashion。如果我運行我的查詢,mysql將無法找到特定類別,因爲它讀取Woman's Fashion女士時尚,但我的查詢$sql_select = "SELECT * FROM tblproduct WHERE prodCat = '$selected_cat'";正在將其讀取爲女士時尚這是mysql中的錯誤格式。

+1

學習使用參數化查詢。避免不必要的語法錯誤是最好的原因。避免SQL注入非常緊密。重新使用查詢計劃非常接近第三。而且,毫無疑問,其他真正的理由也是如此。 –

回答

0

我希望下面的代碼將幫助您使用和addslashes()函數

if ($selected_cat == "All Item" || !isset($selected_cat)) { 
    $sql_select = "SELECT * FROM tblproduct"; 
} 
else { 
    $sql_select = "SELECT * FROM tblproduct WHERE prodCat ='".addslashes($selected_cat)."'"; 
} 
$result = $conn->query($sql_select); 

if ($result->num_rows > 0){ 
    while($row = mysqli_fetch_assoc($result)) 
    { 
     extract($row); 
     // some statement to display item 
    } 
} 
+0

它工作得很好!謝謝 :) –

0

您必須準備查詢,然後將值綁定到它們以避免此類問題。由於我開發的法語應用程序,我遇到過這麼多次。

我最好的建議你向PDO合併和使用準備+可執行,見下面的例子:

function getDocument($conn, $ref) 
{ 
    $req = $conn->prepare('SELECT * FROM document where reference= :reference'); 
    $req->execute(array('reference' => $ref)); 
    return $req->fetchAll(); 
} 

相信我,一旦你習慣了PDO,你會救自己從大量的這種頭痛類。此外,它將確保您的應用程序免受SQL注入。

0

既然你已經在使用的mysqli,學會使用綁定參數準備好的語句,如:

$query = "SELECT * FROM tblproduct WHERE prodCat = ?"; 
$stmt = $conn->prepare($query); 

$stmt->bind_param("s", $selected_cat); 
$stmt->execute(); 
$stmt->close(); 

你能做到這一點的面向對象的方式或您當前程序的方式有一個看看這個:http://php.net/manual/en/mysqli-stmt.execute.php

相關問題