Php PDO准备语句中的Mysql变量
我从中找到了问题的答案。下面是SQL:Php PDO准备语句中的Mysql变量,php,mysql,pdo,Php,Mysql,Pdo,我从中找到了问题的答案。下面是SQL: SELECT CONCAT( 'SELECT dm_generics.dm_id', GROUP_CONCAT(CONCAT(' , t_', REPLACE(field_name, '', ''), '.field_value AS ', REPLACE(field_name, '', ''), '' ) SEPARATOR ''), ' FROM dm_generics ', GROUP_CONCAT(CO
SELECT CONCAT(
'SELECT dm_generics.dm_id', GROUP_CONCAT(CONCAT('
, t_', REPLACE(field_name, '', ''), '.field_value
AS ', REPLACE(field_name, '', ''), ''
) SEPARATOR ''),
' FROM dm_generics ', GROUP_CONCAT(CONCAT('
LEFT JOIN dm_generics AS t_', REPLACE(field_name, '', ''), '
ON dm_generics.dm_id = t_', REPLACE(field_name, '', ''), '.dm_id
AND t_', REPLACE(field_name, '', ''), '.field_name = ', QUOTE(field_name)
) SEPARATOR ''),
' GROUP BY dm_generics.dm_id'
) INTO @qry FROM (SELECT DISTINCT field_name FROM dm_generics) t;
PREPARE stmt FROM @qry;
EXECUTE stmt;
但是,我对如何在PDO中执行该查询感到困惑
我试着用这样的东西:
$stmt = $dbh->prepare($sql);
if($stmt->execute())
{
$object = $stmt->fetchAll(PDO::FETCH_OBJ);
return $object;
}
我没有使用PDO::prepare,而是尝试使用PDO查询
$stmt = $dbh->query($sql);
但是,我得到了一个空数组或null。我猜查询出了什么问题,可能是因为里面有一个MySQL变量
这是答案提供的提琴
那么,你能告诉我问题是什么,以及如何让它工作吗
更新:
作为建议,现在我可以让这些查询工作。代码如下:
$sql = "SELECT CONCAT(
'SELECT dm_generics.dm_id', GROUP_CONCAT(CONCAT('
, t_', REPLACE(field_name, '', ''), '.field_value
AS ', REPLACE(field_name, '', ''), ''
) SEPARATOR ''),
' FROM dm_generics ', GROUP_CONCAT(CONCAT('
LEFT JOIN dm_generics AS t_', REPLACE(field_name, '', ''), '
ON dm_generics.dm_id = t_', REPLACE(field_name, '', ''), '.dm_id
AND t_', REPLACE(field_name, '', ''), '.field_name = ', QUOTE(field_name)
) SEPARATOR ''),
' GROUP BY dm_generics.dm_id'
) INTO @qry FROM (SELECT DISTINCT field_name FROM dm_generics) t;";
$sql2 = "PREPARE stmt FROM @qry;";
$sql3 = "EXECUTE stmt;";
$stmt = $dbh->prepare($sql);
$stmt2 = $dbh->prepare($sql2);
$stmt3 = $dbh->prepare($sql3);
if($stmt->execute() && $stmt2->execute() && $stmt3->execute())
{
return $stmt3->fetchAll(PDO::FETCH_OBJ);
}
在单独的callOuch中运行每个查询,这是令人尴尬的。。感谢您的建议,现在它已经起作用了。为什么在没有使用单个占位符的情况下使用prepare?我将在现有查询中添加一些其他查询(WHERE语句):)顺便说一句,我还有一个问题,基于上面更新的代码,我将WHERE语句添加到$sql1中,然后添加$stmt->bindValue(':aaa',$aaa);但是我不能让它工作:)你知道吗?