我已经工作了几天来解决这个小问题。
我正在尝试使用 UNION 从两个表中获取数据。但返回的是这个错误代码:
警告:mysql_fetch_array() 期望参数 1 是资源,布尔值在.....
这是什么意思,我做错了什么?
我的代码行如下所示:
$result = mysql_query("SELECT * FROM $tablet1 WHERE id1=$cho1 UNION SELECT * FROM $tablet2 WHERE id2=21");
您的查询失败并返回FALSE
,而不是生成查询资源。这就是mysql_fetch_array()
返回错误的原因。
始终检查返回值。你可以这样做
$result = mysql_query("SELECT ...");
if ($result) {
//Iterate through the resultset
while ($row = mysql_fetch_assoc($result)) {
...
}
} else {
echo 'Invalid query: ' . mysql_error();
//Do whatever you need to do to recover
}
正如其他人建议的那样,检查并确保两个 select 语句UNION
返回的列数相同,并且相应位置的列具有相同的数据类型。
在每个 SELECT 语句的相应位置列出的选定列应具有相同的数据类型。(例如,第一个语句选择的第一列应该与其他语句选择的第一列具有相同的类型。)
附带说明:请不要将 mysql_* 函数用于新代码。自 PHP 5.5.0 起,它们已被弃用。对PDO或MySQLi使用 准备好的语句。这是很好的PDO 教程。而且您的代码对 sql-injections 是开放的。再次使用准备好的语句。
首先,您需要检查两个查询中的列和数据类型是否相同,因为您使用的是 UNION 运算符。
现在如果你想使用 mysql_fetch_array:
mysql_fetch_array 函数将 MySQL 查询资源作为参数 ($result) 并返回 mysql_query 返回的第一行数据。
就像下面的代码:
<?php
// Make a MySQL Connection
$query = "SELECT * FROM example";
$result = mysql_query($query) or die(mysql_error());
while($row = mysql_fetch_array($result)){
echo $row['name']. " - ". $row['age'];
echo "<br />";
}
?>
请检查以下代码:
$result = mysql_query("SELECT T1.column1,T1.column2,T1.column3,T1.column4,T1.column5
FROM $tablet1 T1 WHERE T1.id1=$cho1
UNION
SELECT T2.column1,T2.column2,T2.column3,T2.column4,T2.column5
FROM $tablet2 T2 WHERE T2.id2=21
");
表 1 中的列数及其在表 1 中的数据类型应与表 2 匹配。
请确保两个表列的数据类型和列号相同。