尝试对查询表进行图形化时,php代码中出现错误

尝试对查询表进行图形化时,php代码中出现错误,php,Php,由于表格中的信息,我需要创建一个并集来显示交叉引用 Tablebrand1是表的名称。2和3 Tablebrand1 CODE CROSSREFERENCE A15 SAMSUNG A10 A16 SAMSUNG A20 A63 SAMSUNG A30 Tablebrand2 CODE CROSSREFERENCE X63 SAMSUNG A10 X64 SAMSUNG A20 X65 SAMSUNG A30 Tablebran

由于表格中的信息,我需要创建一个并集来显示交叉引用

Tablebrand1是表的名称。2和3

Tablebrand1

CODE    CROSSREFERENCE
A15     SAMSUNG A10
A16     SAMSUNG A20
A63     SAMSUNG A30

Tablebrand2

CODE    CROSSREFERENCE
X63     SAMSUNG A10
X64     SAMSUNG A20
X65     SAMSUNG A30

Tablebrand3

CODE    CROSSREFERENCE
TOP99   SAMSUNG A10
TOP98   SAMSUNG A20
TOP97   SAMSUNG A30
SQL查询

(SELECT "Tablebrand1" AS `brand`, CROSSREFERENCE as `code`
    FROM Tablebrand1 WHERE CROSSREFERENCE = 'SAMSUNG A10')
UNION 
(SELECT "Tablebrand2" AS `brand`, CROSSREFERENCE as `code`
    FROM Tablebrand2 WHERE CROSSREFERENCE = 'SAMSUNG A10')
UNION
(SELECT "Tablebrand3" AS `brand`, CROSSREFERENCE as `code`
    FROM Tablebrand3 WHERE CROSSREFERENCE = 'SAMSUNG A10');
查询正确地显示了它,但是当试图在php中显示它时,我会从查询中得到一个错误,因为如果我为更简单的查询修改它,它会正确地显示数据

<?php
echo "<table style='border: solid 1px black;'>";
echo "<tr><th>brand</th><th>code</th></tr>";

class TableRows extends RecursiveIteratorIterator {
  function __construct($it) {
    parent::__construct($it, self::LEAVES_ONLY);
  }

  function current() {
    return "<td style='width:150px;border:1px solid black;'>" . parent::current(). "</td>";
  }

  function beginChildren() {
    echo "<tr>";
  }

  function endChildren() {
    echo "</tr>" . "\n";
  }
}

$servername = "localhost";
$username = "user";
$password = "pass";
$dbname = "dbname";

try {
  $conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
  $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  $stmt = $conn->prepare("((SELECT "Tablebrand1" AS `brand`, CROSSREFERENCE as `code`
    FROM Tablebrand1 WHERE CROSSREFERENCE = 'SAMSUNG A10')
UNION 
(SELECT "Tablebrand2" AS `brand`, CROSSREFERENCE as `code`
    FROM Tablebrand2 WHERE CROSSREFERENCE = 'SAMSUNG A10')
UNION
(SELECT "Tablebrand3" AS `brand`, CROSSREFERENCE as `code`
    FROM Tablebrand3 WHERE CROSSREFERENCE = 'SAMSUNG A10');");
  $stmt->execute();

  // set the resulting array to associative
  $result = $stmt->setFetchMode(PDO::FETCH_ASSOC);
  foreach(new TableRows(new RecursiveArrayIterator($stmt->fetchAll())) as $k=>$v) {
    echo $v;
  }
} catch(PDOException $e) {
  echo "Error: " . $e->getMessage();
}
$conn = null;
echo "</table>";
?>

您没有说明错误消息是什么,但一个明显的错误是您使用的引号没有被转义。
此外,您在查询开始时有一个
过多(
)((选择…
) 因此,您需要像这样转义查询中的引号

$stmt = $conn->prepare("
  (SELECT \"Tablebrand1\" AS `brand`, CROSSREFERENCE as `code`
   FROM Tablebrand1 WHERE CROSSREFERENCE = 'SAMSUNG A10')
  UNION 
  (SELECT \"Tablebrand2\" AS `brand`, CROSSREFERENCE as `code`
   FROM Tablebrand2 WHERE CROSSREFERENCE = 'SAMSUNG A10')
  UNION
  (SELECT \"Tablebrand3\" AS `brand`, CROSSREFERENCE as `code`
   FROM Tablebrand3 WHERE CROSSREFERENCE = 'SAMSUNG A10');"
);
或者,您可以在查询中使用单引号,而不是像这样使用双引号

$stmt = $conn->prepare("
  (SELECT 'Tablebrand1' AS `brand`, CROSSREFERENCE as `code`
   FROM Tablebrand1 WHERE CROSSREFERENCE = 'SAMSUNG A10')
  UNION 
  (SELECT 'Tablebrand2' AS `brand`, CROSSREFERENCE as `code`
   FROM Tablebrand2 WHERE CROSSREFERENCE = 'SAMSUNG A10')
  UNION
  (SELECT 'Tablebrand3' AS `brand`, CROSSREFERENCE as `code`
   FROM Tablebrand3 WHERE CROSSREFERENCE = 'SAMSUNG A10');"
);