【问题标题】:WHERE column_name IN Array() returning empty arrayWHERE column_name IN Array() 返回空数组
【发布时间】:2016-02-21 10:04:05
【问题描述】:

所以我正在尝试查询具有接近 1000 条记录的数据库表,并且我正在尝试根据某个列(主题)值是否在一个特定的数组($topics)。

所以我的函数看起来像这样。

public static function find_records($subject="", $topics=[]){

      global $database;

      foreach($topics as $key => $topic) {
          $topics[$key] = $database->escape_value($topic);
      }

      $newtopics = join("','", $topics);
      $sql = "SELECT * FROM ".$subject." WHERE topic IN ('$newtopics')";

      $result_set = $database->query($sql);

      $object_array = array();
      while ($row = $result_set->fetch_array()) {
        $object_array[] = $row;
      }

      return !empty($object_array) ? $object_array : false;
}

我有一个处理所有查询和转义函数的数据库类,它使用 mysqli。 我的 $object_array 返回到调用此方法的类时为空。 我试图从 while 循环中回显每个 $row 并且它有效,但是在退出 while 循环时,$object_array 甚至没有给出任何“[]”。 我认为这与“WHERE topic IN array”部分有关,因为其他查询在此方法上运行正常。

【问题讨论】:

  • 列数或“字段”的数量与此处无关,但请注意,存在 1000 列有时是设计不佳的症状。
  • 在这种情况下$subject 的值是多少?
  • @RamRaider 可以传入值“sports”,因为有很多主题
  • @Strawberry,我的意思是 1000 条记录,该表大约有 15 个字段(列)。
  • 啊,“行”。那不一样了。

标签: php mysql arrays mysqli


【解决方案1】:

顺便说一句,几乎要表明 sql 实际上是正确的(这不应该是解决问题的方法——尽管 $subject 可能会把事情扔掉?)

/* example data */
$subject='cars';
$topics=array('size','shape','colour','weight');

$newtopics = join("','", $topics);
$sql = "SELECT * FROM `".$subject."` WHERE `topic` IN ( '$newtopics' );";
echo $sql;

will output
SELECT * FROM `cars` WHERE `topic` IN ( 'size','shape','colour','weight' );

【讨论】:

    【解决方案2】:

    在您的 while 循环中,更改

    $row = $database->fetch_array($result_set)
    

    到

    $row = $result_set->fetch_array()
    

    $database 是一个mysqli 对象实例,而您需要mysqli_result 实例才能实际从中获取结果。

    【讨论】:

    • 更改它没有用,我仍然没有得到任何回应。但它在“echo $row;”上很有趣在 while 循环中,我得到了大约 8 条记录被吐出。
    • 还是一样的结果。
    • 能否请您在问题中显示更改后的代码?很难在没有看到的情况下说出发生了什么。 (保留您的其余问题,只需在最后添加更改的代码。)
    • 我把它改了给你看。但是“echo $row”的结果现在返回一个 MYSQLI_BOTH(将 $key-$value 对显示为数字和属性值)实例,而不是之前返回的 MYSQLI_ASSOC(仅属性值)实例。
    • 您可以使用fetch_assoc() 代替fetch_array(),或者将常量直接传递给函数-fetch_array(MYSQLI_ASSOC)。
    猜你喜欢
    • 2016-08-28
    • 1970-01-01
    • 1970-01-01
    • 2015-10-23
    • 1970-01-01
    • 1970-01-01
    • 2020-04-22
    • 2020-07-21
    • 2015-08-18
    相关资源
    最近更新 更多