【问题标题】:What's wrong with my select query?我的选择查询有什么问题?
【发布时间】:2009-09-16 13:16:14
【问题描述】:

我编写此代码是为了获取表中的所有记录;但是由于某种原因它不起作用:

function GetAllData(){
    $result = mysql_query("SELECT * FROM a2h_member_type");

    while($row = mysql_fetch_array($result))
    {
        echo $row['member_type_id'] . " " . $row['member_type_name'] . " " . $row['description'];       
    }
}

它没有进入 while 循环,但表中有 2 条记录。有什么想法吗?

【问题讨论】:

  • 你确定你已经打开了与数据库的连接,并输入了正确的数据库和表名等吗?不要听起来居高临下,这正是我 99% 的问题的根源——愚蠢的语法错误。
  • mysql_num_rows($result) 的结果是什么?

标签: php sql mysql


【解决方案1】:

while 循环不会运行有两个原因:

  1. 查询失败。鉴于查询的简单性,只有在以下情况下才会发生这种情况:
    • 该表不存在
    • 没有与数据库的连接
  2. 表中没有行。

你能检查这三件事吗?打印出mysql_error()可以查看是否有错误,使用mysql_get_num_rows($result)可以查看返回的行数

【讨论】:

  • 什么不起作用?检查不起作用?这些函数的输出是什么?
【解决方案2】:

检查 mysql_errno()mysql_error() 返回的内容。

根据PHP documentation

从 MySQL 数据库后端返回的错误不再发出警告。

这意味着您必须手动检查错误(无论如何这是一个好习惯)。

【讨论】:

    【解决方案3】:

    我唯一的建议是用单反引号将表名括起来(我确信这个角色有一个更正式的名称!):

    $result = mysql_query("SELECT * FROM `a2h_member_type`");
    

    - 但是由于您的表名中没有任何奇怪的字符,我认为这不会有太大的不同。不过可能值得一试。

    【讨论】:

    • 我认为公认的角色“官方”名称是“反引号”:-)
    【解决方案4】:

    您已将其封装在一个函数中。根据脚本中调用函数的时间和位置,您可能尚未打开数据库连接或尚未选择数据库。在调用此函数之前,您需要同时执行这两项操作。去寻找函数在你的代码中被调用的地方,并确保你在调用它之前调用了这两个东西:

    $con = mysql_connect([the databases URL], [your database username], [your database password]);
    if(!$con) {
            die("Could not connect: " .mysql_error());
    }
    mysql_select_db([the name of your database], $con);
    

    最好的办法可能是以某种方式保存连接变量(本例中的 $con)并在函数开头使用 if(!$con) 代码检查它。

    【讨论】:

      【解决方案5】:

      我没有看到 mysql_connect() 或 mysql_select_db() 命令,所以我假设您在调用此方法之前已经连接。我还假设您对字段名称使用了准确的拼写,因为它们区分大小写!因此,逻辑会规定 mysql_fetch_array($result) 不返回任何行。

      由于该方法没有显式打开数据库并且 mysql_query() 没有指定特定的数据库资源,因此查询将查看您使用 mysql_connect() 打开的最后一个数据库。如果您从未连接或切换到其他数据库,则它无法找到该数据库。 mysql_query() 可能返回 FALSE,因此 mysql_fetch_array() 也返回 FALSE。

      【讨论】:

        【解决方案6】:

        首先尝试添加一些调试信息:

        error_reporting(E_ALL);
        ini_set("display_errors", true);
        ..........
        function GetAllData(){
            $result = mysql_query("SELECT * FROM a2h_member_type") or die(mysql_error());
        
            while($row = mysql_fetch_array($result))
            {
        
                echo $row['member_type_id'] . " " . $row['member_type_name'] . " " . $row['description'];
        
            }
        }
        

        请执行此操作并告诉我们您看到了什么。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2020-01-06
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-07-26
          • 2014-04-12
          • 2015-07-31
          • 2010-12-23
          相关资源
          最近更新 更多