【问题标题】:MySQL running directly but syntax error in CodeIgniterMySQL 直接运行但 CodeIgniter 中的语法错误
【发布时间】:2014-02-25 13:58:11
【问题描述】:

编辑:我发现问题在于 PHP 中的多个查询,那么 codeigntier 有什么锻炼方法?我必须自己使用 mysqli 函数还是可以使用内置的 Codeigniter DB 类?

我有一个查询在我将其粘贴到 PHPMyAdmin 时运行良好,但是当我在 codeigniter 中运行它时会导致语法错误,谁能提供帮助?

这里是 SQL

SET @sql = NULL;

SELECT 
    GROUP_CONCAT(DISTINCT
        CONCAT(
            'MAX(IF(user_fields_to_users.map_field_id=''',field_id,''',user_fields_to_users.map_data,NULL)) AS ', field_name)) INTO @sql

FROM user_custom_fields;

SET @sql = CONCAT('SELECT *
                    ,', @sql, '
                    FROM user_accounts  LEFT JOIN user_fields_to_users ON
                    user_accounts.user_id = user_fields_to_users.map_user_id
          GROUP BY user_accounts.user_id');

PREPARE stmt FROM @sql;

EXECUTE stmt;

我正在使用 mysqli 和 codeigniters $this->db->query();

我得到的错误是

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'SELECT GROUP_CONCAT(DISTINCT CONCAT( 'MAX(IF(user_fields_t' at line 3

【问题讨论】:

  • 尝试将SET @sql = NULL; 作为单独的查询运行
  • 为什么要在MAX前加上单引号?
  • 我老板写的所以我不确定,我会问
  • @ajtrichards 当我这样做时似乎到达第 8 行,在下一个 SET 命令处停止
  • 我看到这是一个多查询问题...

标签: php mysql sql codeigniter mysqli


【解决方案1】:

改变

'MAX(IF(user_fields_to_users.map_field_id

MAX(IF('user_fields_to_users.map_field_id

【讨论】:

    【解决方案2】:

    问题是多个查询,这是我使用的代码

    $sql = "
    SET @sql = NULL;
    SELECT 
        GROUP_CONCAT(DISTINCT
            CONCAT(
                'MAX(IF(user_fields_to_users.map_field_id=''',field_id,''',user_fields_to_users.map_data,NULL)) AS ', field_name)) INTO @sql
    FROM user_custom_fields;
    SET @sql = CONCAT('SELECT *
                        ,', @sql, '
                        FROM user_accounts  LEFT JOIN user_fields_to_users ON
                        user_accounts.user_id = user_fields_to_users.map_user_id
              GROUP BY user_accounts.user_id');
    PREPARE stmt FROM @sql;
    EXECUTE stmt;
    ";
    if ($this->db->conn_id->multi_query($sql)) {
        do {
            if ($result = $this->db->conn_id->store_result()) {
                $this->selection_total_results = $result->num_rows;
                while ($row = $result->fetch_array()) {
                    $result_data[] = $row;
                }
                $result->free();
            }
        } while ($this->db->conn_id->next_result());
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-08-14
      • 2021-12-20
      • 1970-01-01
      • 1970-01-01
      • 2014-09-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多