尝试对查询表进行图形化时,php代码中出现错误
由于表格中的信息,我需要创建一个并集来显示交叉引用 Tablebrand1是表的名称。2和3尝试对查询表进行图形化时,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
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');"
);