【问题标题】:Just need a comma separated list from PHP/MySQL query [duplicate]只需要一个逗号分隔的 PHP/MySQL 查询列表 [重复]
【发布时间】:2014-06-11 20:14:53
【问题描述】:

我不明白为什么这如此困难。 我有一个 SQL 查询,它产生一列数字结果,即:

23
45
67
54
34
78
56

使用 PHP/MySQL 查询,我想简单地生成这些值的逗号分隔列表,这些值可以在其他地方显示或使用。这是我正在使用的代码

 <?php


global $wpdb;

$sql = <<<SQL
SELECT FK_T_L_INCENTIVES_ID FROM lighting_incentives.WAYPOINT_USER_PICKED WHERE WP_RECOMMENDED = 1 AND FK_USER_ID = 31
SQL;

if (!$sql) { // add this check.
    die('Invalid query: ' . mysql_error());
}

$resultset = array();
$rebates = $wpdb->get_results( $sql, ARRAY_A );
foreach($rebates as $data) {
    $resultset[] = $data;
}
$comma_separated = implode(",", $resultset);

print $comma_separated;
?>

由于某种原因,我不断收到错误

mysql_fetch_array() expects parameter 1 to be resource

任何帮助将不胜感激!

【问题讨论】:

  • $rebates 是否返回错误?
  • 仅仅用if (!$sql) 测试字符串的真实性不会告诉你查询的有效性;之后运行。
  • 我猜你正在使用 wordpress,如果是这样,那么 $wpdb 是 wpdb 类的对象,你不需要调用 mysql_fetch_array() 只需循环 $rebates
  • 默认情况下,get_results() 返回“行对象的数字索引数组”。 codex.wordpress.org/Class_Reference/wpdb#SELECT_Generic_Results
  • 感谢您的帮助,您能否进一步解释我如何在不使用 mysql_fetch_array() 的情况下循环 $rebates

标签: php mysql sql wordpress


【解决方案1】:

如果您愿意,这可以在 SQL 中完成...您只需在返回数字的列上执行此操作GROUP_CONCAT(column_name),它会将所有内容放在一行中,并以逗号分隔

无需编写多行 php 代码

【讨论】:

    【解决方案2】:

    试试这个:

    $resultset = array();
    $rebates = $wpdb->get_results( $sql );
    foreach($rebates as $data) {
    $resultset[] = (array) $data;
    }
    
    $comma_separated = implode(",", $resultset);
    
    echo  $comma_separated;
    

    【讨论】:

      【解决方案3】:

      改变

      $resultset=array();
      $rebates = $wpdb->get_results( $sql );
      while ($data = mysql_fetch_array($rebates,MYSQL_NUM)) {
          $resultset[] = $data;
      }
      

      $resultset = array();
      $rebates = $wpdb->get_results( $sql, ARRAY_A );
      foreach($rebates as $data) {
          $resultset[] = $data;
      }
      

      More info on how to use get_results()

      【讨论】:

      • 感谢您的帮助!替换您建议的代码后,我现在收到此错误Catchable fatal error: Object of class stdClass could not be converted to string
      • 添加了第二个参数来获取数组
      • 感谢您的帮助!我已经更新了上面代码的当前版本。现在,当页面加载时,我得到Array,Array,Array,Array,Array,Array,Array,Array,Array,Array,Array,Array,Array,Array,Array,Array,Array,Array,Array,Array,Array,Array,Array,Array,Array,Array,Array,Array,Array,Array,Array,Array,Array,Array,Array,Array,Array,Array,Array 你对如何将这些“数组”字符串中的每一个更改为我想要的数字有任何额外的见解吗?
      • @MattShirk 这是正确的响应,您只是在打印整个数组。如果您想查看数组中的信息,请尝试将打印更改为 print_r ($comma_separated); 之类的内容
      • @JohnRuddell 感谢您的帮助,但是在添加 print_r ($comma_separated); 后,我仍然收到相同的回复 Array,Array,Array,Array,Array,Array,Array, etc
      【解决方案4】:

      $wpdb 不返回 MySQL,请尝试:

      $table_ids = $wpdb->get_col( "SELECT id FROM table" ); 
      

      来源:http://codex.wordpress.org/Class_Reference/wpdb

      【讨论】:

        【解决方案5】:

        @JohnRuddell @Machavity

        感谢您的帮助。这是最终有效的代码。

        <?php
        
        
        global $wpdb;
        $user_ID = get_current_user_id();
        $sql = <<<SQL
        SELECT FK_T_L_INCENTIVES_ID FROM lighting_incentives.WAYPOINT_USER_PICKED WHERE WP_RECOMMENDED = 1 AND FK_USER_ID = $user_ID
        SQL;
        
        if (!$sql) { // add this check.
            die('Invalid query: ' . mysql_error());
        }
        
        $resultset = array();
        $rebates = $wpdb->get_results( $sql, ARRAY_A );
        foreach($rebates as $data) {
             echo $data['FK_T_L_INCENTIVES_ID']. ",";
        }
        
        ?>
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-07-03
          • 2011-06-18
          • 2015-11-29
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多