【问题标题】:Implode array & search for matches mysql php内爆数组并搜索匹配的mysql php
【发布时间】:2014-02-16 23:07:05
【问题描述】:

我正在尝试获取array 并将其内爆,然后通过 mysql 查询运行它以搜索我的数据库以查找匹配项。如果有匹配,我想返回匹配的值。它一直返回错误,我不知道为什么。我做了一个vardump,可以看到数组在那里,但似乎没有被传递给mysql_query。如果我手动将数组放入查询中,它就没有问题。有什么想法吗?

我的数组(来自我的 Android 应用):

$refids = (jdu23764js84, 2746272jsjs7f, 39823874hbsjsk)

PHP脚本代码:

public function searchList($refids) {
    $refarray = array($refids);        
    $comma_separated = implode(',', $refarray);            
    $result = mysql_query("SELECT `ref_id` FROM `main` WHERE `ref_id` IN
    ({$comma_separated})");        
    if ($result == true){  
        $result = mysql_fetch_array($result);                     
            return $result;                
        } else {
          return false; 
    }

【问题讨论】:

  • 你确定这是一个数组,而不是一个字符串?

标签: php android mysql arrays


【解决方案1】:

您忘记引用 $refid 中的各个值,因此您正在构建

... WHERE `ref_id` IN (jdu23764js84, 2746272jsjs7f, ...)

并且 MySQL 将这些解释为字段名称。换句话说,您正遭受 SQL 注入攻击漏洞的困扰,并且您完全没有对数据库代码进行任何错误处理,这导致您无法看到 mysql 试图告诉您的错误:

$csv = implode("','", $refarray);
                ^-^-- note the addition of the quotes:

$sql = "SELECT .... `ref_id` IN ('{$csv}')";
                                 ^------^--- again, note the quotes

这可以在短期内解决问题。从长远来看,您需要通读 http://bobby-tables.com 并了解它要告诉您的内容。

【讨论】:

  • 这不起作用。它不是用单独的引号分隔值。它只是在创建 'du23764js84, 2746272jsjs7f, 39823874hbsjsk'
  • 那么你有一个字符串,而不是一个数组,你的内爆毫无意义。
  • array('f,o,o') 不会给你一个包含 3 个元素的数组。它给你一个数组,里面有一个 SINGLE 字符串,恰好有 3 个字母和 2 个逗号。
猜你喜欢
  • 2011-03-23
  • 1970-01-01
  • 2014-08-19
  • 1970-01-01
  • 1970-01-01
  • 2017-12-01
  • 1970-01-01
  • 2019-07-26
  • 1970-01-01
相关资源
最近更新 更多