【问题标题】:Trouble with UNION SELECTUNION SELECT 的问题
【发布时间】:2013-02-13 06:03:44
【问题描述】:

我已经工作了几天来解决这个小问题。

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

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

这是什么意思,我做错了什么?

我的代码行如下所示:

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

【问题讨论】:

    标签: mysql sql


    【解决方案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 是开放的。再次使用准备好的语句。

    【讨论】:

      【解决方案2】:

      请确保两个表格列的数据类型和列号相同。

      【讨论】:

        【解决方案3】:

        首先,您需要检查两个查询中的列和数据类型是否相同,因为您使用的是 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 />";
        }
        ?>
        

        【讨论】:

          【解决方案4】:

          请检查以下代码:

          $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一致。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2014-04-23
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多