2012-03-20 120 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