UNION SELECT出现问题

时间:2013-02-13 06:03:45

标签: mysql sql

我一直在努力解决这个小问题。

我正在尝试使用UNION从两个表中获取数据。但是返回的是这个错误代码:

  

警告:mysql_fetch_array()期望参数1是资源,在......中给出布尔值

这意味着什么,我做错了什么?

我的代码行如下所示:

  

$ result = mysql_query(“SELECT * FROM $ tablet1 WHERE id1 = $ cho1 UNION SELECT * FROM $ tablet2 WHERE id2 = 21”);

4 个答案:

答案 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语句返回相同数量的列,相应位置的列具有相同的数据类型。

  

查看更多13.2.8.4. UNION Syntax

     

在每个SELECT的相应位置列出的选定列   语句应具有相同的数据类型。 (例如,第一个   第一个语句选择的列应具有相同的类型   其他陈述选择的第一列。)

作为旁注:请不要将mysql_ *函数用于新代码。他们是deprecated as of PHP 5.5.0。将prepared statementsPDOMySQLi一起使用。这是好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 />";
}
?>