Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/298.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 我的select查询有什么问题?_Php_Sql_Mysql - Fatal编程技术网

Php 我的select查询有什么问题?

Php 我的select查询有什么问题?,php,sql,mysql,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'] . " " . $r

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

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

while循环无法运行有两个原因:

查询失败。鉴于查询的简单性,只有在以下情况下才会发生这种情况: 这个表不存在 与数据库没有连接 表中没有行。 你能检查一下这三件东西吗?您可以通过打印mysql\u error检查是否有错误,也可以使用mysql\u get\u num\u rows$result检查返回的行数

检查mysql\u errno和mysql\u error返回的内容

根据:

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


这意味着您必须手动检查错误,这是一种很好的做法。

我唯一的建议是将表名用单引号括起来。我确信该字符有一个更正式的名称!:

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

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

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

$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 code.

我没有看到mysql\u connect或mysql\u select\u db命令,因此我假设您在调用此方法之前已连接。我还假设您使用了字段名的精确拼写,因为它们区分大小写!所以,逻辑要求mysql_fetch_array$result不返回任何行


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

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

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

    }
}

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

您确定已打开与数据库的连接,并键入了正确的数据库和表名等吗?听起来不是居高临下,这正是我99%的问题来自于愚蠢的语法错误。mysql_num_rows$result的结果是什么?我认为这个角色的官方名称是backtick:-什么不起作用?检查不起作用?这些函数的输出是什么?