2012-03-20 119 views
0

我在连接到mysql数据库并返回表结果的windows平台上创建了一个脚本。我写了一个非常基本的脚本来简单地测试我的连接。该脚本在我的Windows机器上正常工作,但不在我的新Mac上。在Mac上它根本不显示任何记录。PHP不显示MYSQL结果

我知道数据库连接已经建立,因为没有错误,但我不明白为什么结果集没有显示在屏幕上,因为我说它在我的Windows机器上工作正常。

Mac有MySQL(带数据)和Apache运行PHP。

请有人可以帮忙,因为我现在不知道该怎么办?

脚本如下:

$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); 
+0

请确保您有'的error_reporting(E_ALL);'和'的ini_set( 'display_errors设置',1);'如果MySQL扩展不装在Mac上,它会出错,但不是死'()' – 2012-03-20 17:06:45

+0

什么呢mysql_num_rows($结果);给你? – SpaceBeers 2012-03-20 17:07:09

+0

尝试使用'mysql_fetch_assoc',而不是'mysql_fetch_array'和'test1',从'$行[ 'test1的']'实际上必须是列名。 – 2012-03-20 17:08:14

回答

0

它很难看到什么是错的......所以加一些基本的错误检查,像改变这一

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

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

这会告诉你从查询中得到的错误(如果有的话)..你在documentationmysql_query,它返回一个boolean如果有一个错误

另外请注意,您必须关闭MySQL连接的变量名的错误:

mysql_close($con); 

应该

mysql_close($conn); 
0

在获取行之前检查SELECT查询是否成功。

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

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

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

查看错误

+0

有Windows之间的怎么没有区别,Linux和OSX会根据表格来区分大小写。无论操作系统如何,myTable,MYTABLE或mYtAbLe都可以工作。 – kba 2012-03-20 17:15:53

+0

@KristianAntonsen这不是真的,我有过这个问题很多次...... http://dev.mysql.com/doc/refman/5.0/en/identifier-case-sensitivity.html – 2012-03-20 17:27:03

+0

你说得对,与Linux有区别,但没有Windows或OSX,这是你的答案。 – kba 2012-03-20 17:40:46

1

有你可以做调试这各种各样的事情。

  • 显示所有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()); 
    

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

0

我认为你应该使用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(); 

     } 
+0

中肯execption敏感:我觉得异常应通过DB驱动程序中抛出,而不是你的代码,因为主例外的好处是您不必在每一步都检查返回代码。 PDO这样做。 – 2014-04-04 10:28:22