我在下拉菜单中填充了数据库中的类别列表。网站应该能够根据用户选择的类别显示项目。
我目前的编码:
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中的错误格式。
答案 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
}
}