PHP不显示MYSQL结果

PHP不显示MYSQL结果,php,mysql,Php,Mysql,我在windows平台上创建了一个脚本,它连接到mysql数据库并返回表的结果。我编写了一个非常基本的脚本来测试我的连接是否有效。该脚本在我的windows计算机上运行良好,但在我的新mac上运行不正常。在mac上,它根本不显示任何记录 我知道数据库连接已经建立,因为没有错误,但我不明白为什么结果集没有显示在屏幕上,因为我说过它在我的windows机器上运行良好 Mac有mysql和php的apache 我现在不知道该怎么办,有人能帮忙吗 脚本如下: $dbhost = 'localhost';

我在windows平台上创建了一个脚本,它连接到mysql数据库并返回表的结果。我编写了一个非常基本的脚本来测试我的连接是否有效。该脚本在我的windows计算机上运行良好,但在我的新mac上运行不正常。在mac上,它根本不显示任何记录

我知道数据库连接已经建立,因为没有错误,但我不明白为什么结果集没有显示在屏幕上,因为我说过它在我的windows机器上运行良好

Mac有mysql和php的apache

我现在不知道该怎么办,有人能帮忙吗

脚本如下:

$dbhost = 'localhost';
$dbuser = 'root';
$dbpass = 'root';

$conn = mysql_connect($dbhost, $dbuser, $dbpass) or die ('Error connecting to mysql');

$dbname = 'test';

mysql_select_db($dbname);

mysql_select_db("test", $conn);

$result = mysql_query("SELECT * FROM new_table");

while($row = mysql_fetch_array($result))
  {
  echo $row['test1'] . " " . $row['test2'] . " " . $row['test3'];
  echo "<br />";
  }

mysql_close($con);

很难看出什么是错的。。。因此,添加一些基本的错误检查,如更改此

$result = mysql_query("SELECT * FROM new_table");

这将显示从查询中得到的错误(如果有)。。您将在for mysql_查询中看到,如果出现错误,它将返回一个布尔值

还要注意,关闭MySQL连接的变量名中有一个错误:

mysql_close($con);
应该是

mysql_close($conn);
在获取行之前,检查SELECT查询是否成功

<?php
$result = mysql_query("SELECT * FROM new_table");
if(!$result)
     die('SQL query failed: ' . mysql_error());

我能想到的唯一一件事是Mac文件系统是区分大小写的,而windows则不是,所以可能是您错拼了表名。在任何情况下,你都应该这样做

$result = mysql_query("SELECT * FROM new_table") or die("error:".mysql_error());

要查看错误

可以执行多种操作来调试此错误

显示所有PHP错误

ini_set('display_errors','On');
ini_set('error_reporting',E_ALL);
捕获所有可能的MySQL错误,而不仅仅是关于您是否成功连接的错误

mysql_select_db("test", $conn) or die(mysql_error());
mysql_select_db($dbname) or die(mysql_error());
$result = mysql_query("SELECT * FROM new_table") or die(mysql_error());

旁注:没有理由选择要使用两次的数据库。

我认为您应该使用改进的PHP mysql驱动程序

        try
        {

            $db = new mysqli("localhost","root","root","test");

            if ($db->connect_errno) {
                throw new Exception($db->connect_error);
            }

            if ($result = $db->query("SELECT * FROM new_table")) {
                printf("Select returned %d rows.\n", $result->num_rows);


                while($row = $result->fetchAssoc())
                  {
                    echo $row['test1'] . " " . $row['test2'] . " " . $row['test3'];
                    echo "<br />";
                  }


                /* free result set */
                $result->close();
            }


            $db->close();   
        }
        catch(Exception $e)
        {
                printf("Database Error: %s\n", $e->getMessage());
                exit();

        }

确保你有错误报告;和ini设置“显示错误”,1;如果MySQL扩展没有加载到Mac上,它会出错,但不会出错MySQL_num_rows$的结果是什么;给你什么?试着从$row['test1']使用mysql\u fetch\u assoc而不是mysql\u fetch\u数组和test1实际上必须是列名。还要确保数据库用户在Mac上有权限,但如果它是根用户,则不应是列名issue@SorinButurugeanu实际上不需要,因为默认情况下mysql_fetch_数组返回关联数组和数字数组Windows、Linux和OSX处理表大小写敏感度的方式没有区别。不管操作系统如何,myTable、myTable或myTable都能工作。@KristianAntonsen这不是真的,我有过很多次这个问题。。。你说得对,Linux有区别,但Windows或OSX没有区别,这正是你的答案所宣称的。@Kristantansen Mac Os可能区分大小写。阅读文档:但是,Mac OS X也支持UFS卷,它与任何Unix上的卷一样区分大小写。Apropos execption:我认为异常应该由db驱动程序引发,而不是由您的代码引发,因为异常的主要优点是您不必在每一步都检查返回代码。PDO就是这样做的。
        try
        {

            $db = new mysqli("localhost","root","root","test");

            if ($db->connect_errno) {
                throw new Exception($db->connect_error);
            }

            if ($result = $db->query("SELECT * FROM new_table")) {
                printf("Select returned %d rows.\n", $result->num_rows);


                while($row = $result->fetchAssoc())
                  {
                    echo $row['test1'] . " " . $row['test2'] . " " . $row['test3'];
                    echo "<br />";
                  }


                /* free result set */
                $result->close();
            }


            $db->close();   
        }
        catch(Exception $e)
        {
                printf("Database Error: %s\n", $e->getMessage());
                exit();

        }