使用php PDO执行mysql pivotable语句

时间:2015-09-11 14:16:43

标签: php mysql pdo

我在命令行中有Mysql prepare语句工作。如何让它与PHP PDO准备语句一起使用?

set @sql = null;
SET group_concat_max_len=15000;

select group_concat(distinct concat('sum(if(date=''',date_format(date,'%Y-%m-%d'),''',total,null)) as ', date_format(date,'dd%Y%m%d'))) into @sql from sales where date_format(date,'%m%y')='0615';

set @sql = concat('select ',@sql,'  from sales');

PREPARE stmt FROM @sql;
EXECUTE stmt;

2 个答案:

答案 0 :(得分:0)

在这种情况下,您不需要在PDO中使用准备好的语句。

您粘贴的代码是获取在纯SQL中运行的动态生成语句的唯一方法。

由于涉及PHP,您应该在for循环中生成该SQL并使用PDO :: query方法执行它。

答案 1 :(得分:0)

您可以使用PHP而不是SQL来进行组连接。

$pdo->query("SET group_concat_max_len = 15000");
$stmt1 = $pdo->prepare("select distinct concat('sum(if(date=''',date_format(date,'%Y-%m-%d'),''',total,null)) as ', date_format(date,'dd%Y%m%d')) as col from sales where date_format(date,'%m%y')= :mmyy";
$stmt1->execute(":mmyy" => '0615');
$cols = $stmt1->fetchAll(PDO::FETCH_COLUMN, 0);
$cols_string = implode(',' $cols);
$sql = "SELECT $col_string FROM sales";
$stmt2 = $pdo->prepare($sql);
$stmt2->execute();