我一直在努力解决这个小问题。
我正在尝试使用UNION从两个表中获取数据。但是返回的是这个错误代码:
警告:mysql_fetch_array()期望参数1是资源,在......中给出布尔值
这意味着什么,我做错了什么?
我的代码行如下所示:
$ result = mysql_query(“SELECT * FROM $ tablet1 WHERE id1 = $ cho1 UNION SELECT * FROM $ tablet2 WHERE id2 = 21”);
答案 0 :(得分:1)
您的查询失败并返回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
}
正如其他人建议检查并确保UNION
中的两个select语句返回相同数量的列,相应位置的列具有相同的数据类型。
在每个SELECT的相应位置列出的选定列 语句应具有相同的数据类型。 (例如,第一个 第一个语句选择的列应具有相同的类型 其他陈述选择的第一列。)
作为旁注:请不要将mysql_ *函数用于新代码。他们是deprecated as of PHP 5.5.0。将prepared statements与PDO或MySQLi一起使用。这是好PDO tutorial。而且你的代码对sql-injections很开放。再次使用准备好的陈述。
答案 1 :(得分:0)
请确保两个表列的数据类型和列号相同。
答案 2 :(得分:0)
请检查以下代码:
$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相匹配。
答案 3 :(得分:0)
首先,你需要在查询中检查列和数据类型是否相同,因为你正在使用UNION运算符。
现在,如果你想使用mysql_fetch_array:
mysql_fetch_array函数将MySQL查询资源作为参数($ result),并返回mysql_query返回的第一行数据。
就像代码bewlo:
<?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 />";
}
?>