MySQL查询选择具有特定项目的行

时间:2017-04-22 13:50:28

标签: php 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 value部分人员有{strong>叛逆('),例如Woman's Fashion。如果我运行我的查询,mysql将无法找到特定类别,因为它将{{1>}称为女性时尚,但我的查询{{1正在将它读作女人的时尚,这是mysql中的错误格式。

3 个答案:

答案 0 :(得分:0)

您必须准备查询然后将值绑定到它们以避免此类问题。由于我开发的法语应用程序,我遇到过这么多次。

我最好的建议是合并PDO并使用prepare + execute,请参阅下面的示例:

function getDocument($conn, $ref)
{
    $req = $conn->prepare('SELECT * FROM document where reference= :reference');
    $req->execute(array('reference' => $ref));
    return $req->fetchAll();
}
相信我,一旦你习惯了PDO,你就可以避免这种烦恼。此外,它还可以保护您的应用免受SQL注入。

答案 1 :(得分: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

答案 2 :(得分: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
    }
}