Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/262.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php PDO准备语句中的Mysql变量_Php_Mysql_Pdo - Fatal编程技术网

Php PDO准备语句中的Mysql变量

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

我从中找到了问题的答案。下面是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;
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);但是我不能让它工作:)你知道吗?