我的选择查询出了什么问题?

时间:2009-09-16 13:16:14

标签: php sql mysql

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

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条记录。有什么想法吗?

6 个答案:

答案 0 :(得分:4)

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

  1. 查询失败。鉴于查询的简单性,这只有在以下情况下才会发生:
    • 表格不存在
    • 没有与数据库的连接
  2. 表格中没有行。
  3. 你能检查这三件事吗?您可以通过打印mysql_error()来检查是否有错误,并且可以使用mysql_get_num_rows($result)检查返回的行数

答案 1 :(得分:3)

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

根据PHP documentation

  

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

这意味着您必须手动检查错误(无论如何这都是好的做法)。

答案 2 :(得分:0)

我唯一的建议就是将表名用单引号括起来(我确定这个字符有一个更正式的名字!):

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

- 但由于你的表名中没有任何奇怪的字符,我认为这不会产生太大的影响。可能值得一试。

答案 3 :(得分:0)

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

$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)代码在函数的开头检查它。

答案 4 :(得分:0)

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

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

答案 5 :(得分:0)

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

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'];

    }
}

请执行此操作并告诉我们您的所见。