我正在尝试从一行中创建一个支点列,但在php中遇到了一些挑战。当我在mysql consol中运行我的查询时,它工作得很好,并返回所需的值。但是当我在php中运行它时,它会返回一个mysql语法错误。我没有弄清楚真正的问题是什么。对于普通mysql和php分别有以下查询:
SET @sql = NULL;
SELECT
GROUP_CONCAT(DISTINCT
CONCAT(
'sum(case when Ref_Month = ''',
Ref_Month,
''' then Total_Income end) AS ''',
Ref_Month, ''''
)
) INTO @sql
FROM mytable;
SET @sql = CONCAT('SELECT Tone_Name, ', @sql, ' FROM mytable WHERE Ref_Year in (2015) GROUP BY Tone_Name limit 10');
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;用于PHP/代码点火器
$query = $this->db->query("SET @sql = NULL;SELECT GROUP_CONCAT(DISTINCT CONCAT('sum(case when Ref_Month = ''', Ref_Month, ''' then Total_Income end) AS ''', Ref_Month, '''')) INTO @sql FROM mytable; SET @sql = CONCAT('SELECT Tone_Name, ', @sql, ' FROM mytable WHERE Ref_Year in (2015) GROUP BY Tone_Name limit 10'); PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;");收到的错误消息是:
数据库错误发生了错误号: 1064 Erreur de syntaxe pr de 'SELECT GROUP_CONCAT(‘sum( Ref_Month =’,Ref_Month,‘la ligne 1)
谁来帮帮我。我还想知道如何在HTML/PHP中为前端显示这样的列和行。
谢谢。
发布于 2016-06-29 14:08:52
在单个query()方法调用中运行多个查询。标准的MySQL数据库驱动程序有单独的方法在单个调用中执行多个sql查询,但CI使用的标准调用只允许每次调用执行单个sql命令。
在单独的CI查询调用中执行每个sql语句:
$this->db->query("SET @sql = NULL");
...
$this->db->query("DEALLOCATE PREPARE stmt");尽管您可以自己在php中完成所有的字符串连接,所以您根本不需要使用MySQL的准备语句。
https://stackoverflow.com/questions/38100802
复制相似问题