【问题标题】:Query with special characters in PHP在 PHP 中使用特殊字符进行查询
【发布时间】: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("&#039;", "&rsquo;", $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

【问题讨论】:

  • 这就是为什么你应该使用带参数的准备好的语句而不是连接变量。

标签: php mysql


【解决方案1】:

您将字段定义为“specific_skins_list[]”,因此它会生成一个数组而不是字符串,这就是您收到错误的原因。 mysqli_real_escape_string 仅适用于字符串。 解决这个问题的最简单方法是循环这个数组,在每个元素上调用 mysqli_real_escape_string,例如:

$skins = [];
foreach($_POST["specific_skins_list"] as $skin)
  $skins[] = mysqli_real_escape_string($conn,$skin);

现在,您的 $skins 变量包含格式正确的 SQL 查询字符串(可能)。 当然,在一个真实的脚本中你应该做更多的验证——你应该确保 $_POST["specific_skins_list"] 被定义并且确实是一个数组(使用 isset 和 is_array),并且每个元素都是一个有效的皮肤名称或其他东西(例如使用 preg_match)。 否则,如果有人绕过您的 UI,直接使用该脚本,您的脚本可能会产生大量错误,或者您的数据库可能会被黑客入侵。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-02-23
    • 1970-01-01
    • 2011-05-30
    • 2015-11-17
    • 1970-01-01
    • 1970-01-01
    • 2016-04-22
    相关资源
    最近更新 更多