【发布时间】:2020-04-23 22:38:38
【问题描述】:
我对名称中包含 ' 的查询有疑问。
选择 HTML:
<select id="list-skins" name = "specific_skins_list[]" multiple="multiple" style="width: 500px">
<?php
$get_all_skins_list= mysqli_query($conn, "SELECT * FROM skins_list");
while($row = mysqli_fetch_array($get_all_skins_list)) {
$skins_name = $row["skins_list"];
$skins_id = $row["id"];
$skins_name = str_replace("'", "’", $skins_name);
echo '<option value="'.$skins_name.'">'.$skins_name.'</option>';
}//END WHILE GET_ALL_REGIONS
?>
</select>
发布
if (isset($_POST["specific_skins_list"])) {
$query .= "
AND skins LIKE '%" . implode("%' or skins LIKE '%", $_POST['specific_skins_list']) ."%'
";
}
我的问题是:在表 skins_list 中,我的名称如下:
i'oan , v'asilivev etc...
这些名称包含'。
如果名称正常且没有特殊字符,则查询可以正常工作。我在搜索中找到了几个使用 mysqli_real_escape_string 的解决方案。
我试图做这样的事情:
if (isset($_POST["specific_skins_list"])) {
$skins = mysqli_real_escape_string($conn,$_POST["specific_skins_list"]) ;
$query .= "
AND skins LIKE '%" . implode("%' or skins LIKE '%", $skins) ."%'
";
}
但我收到此错误:
mysqli_real_escape_string() 期望参数 2 是字符串,数组在...我的页面中给出
查询是这样的:
SELECT *
FROM import_acc
WHERE available = 'YES' AND region = 'UVAS' AND st= 'Truex' AND skins LIKE '%%' "
感谢您的宝贵时间。
附:我认为我可以解决这个问题的唯一方法是修改所有表 skins_list 并在每个名称中添加 manulaly double '' :D
【问题讨论】:
-
这就是为什么你应该使用带参数的准备好的语句而不是连接变量。