2013-06-25 202 views
5

我有一個類可以很好地與PHP 5.3(XAMPP 1.7.3,Windows 7),但不工作在我的服務器(PHP 5.2.17 - 安全模式) :php函數不返回值

<?php 

    class MYSQL_DB { 

     var $connection; 

     function MYSQL_DB() { 
      $this->connection = mysql_connect(S, U, P) or die('Can\'t connect to MySQL server.'); 
      mysql_select_db(DB, $this->connection) or die(mysql_error()); 
     } 

     function getJobs($wid) { 
      $q = "SELECT * FROM " . TB_PREFIX . "joblist where owner = {$wid} order by ID ASC"; 
      $result = mysql_query($q, $this->connection); 
      $ret = $this->mysql_fetch_all($result); 
      mysql_free_result($result); 
      return $ret; 
     } 

     function mysql_fetch_all($result) { 
      $all = array(); 
      if ($result) { 
       while ($row = mysql_fetch_assoc($result)) { 
        $all[] = $row; 
       } 
       return $all; 
      } 
     } 

    } 
    $db=new MYSQL_DB(); 

?> 

而在另一個文件中,我用getjobs功能:

<?php 
    $tempbJobs=$db->getJobs(1368); 
    var_dump($tempbJobs); 
?> 

,當我在getjobs功能return $ret;之前使用權var_dump,它顯示我正確的價值觀,但var_dump($tempbJobs);會打印NULL

P.S:我簡化了代碼,它在我的本地主機上工作,但不在生產服務器上。
PS:如果我改變return $ret;return 'DUMPED';,返回的值是string(6) "DUMPED"

var_dump($ret);輸出:

array(2) { 
    [0]=> 
    array(5) { 
    ["id"]=> 
    string(5) "10755" 
    ["owner"]=> 
    string(5) "23626" 
    ["field"]=> 
    string(1) "6" 
    ["type"]=> 
    string(1) "2" 
    ["expi"]=> 
    string(10) "1372144648" 
    } 
    [1]=> 
    array(5) { 
    ["id"]=> 
    string(5) "10756" 
    ["owner"]=> 
    string(5) "23626" 
    ["field"]=> 
    string(1) "5" 
    ["type"]=> 
    string(1) "2" 
    ["expi"]=> 
    string(10) "1372144654" 
    } 
} 
+0

您的生產服務器是否有數據? – DevZer0

+0

@ DevZer0是的,它有。正如我所說:如果我在'getjobs'函數中'return $ ret;'之前使用'var_dump',它會顯示正確的值。 – undone

+0

@FDL謝謝,但我知道。 – undone

回答

1

基於這樣的事實,你只能從功能mysql_fetch_all($結果)如果$ $全部返回結果是true我必須假定mysql_query()返回false。

,來電後

$result = mysql_query($q, $this->connection); 

您可以添加此

$result = mysql_query($q, $this->connection); 
if (! $result) { 
    echo "ErrorNo: " . mysql_errno() . " Error Message: " . mysql_error(); 
} 

這可能有助於確定問題實際上是什麼,因爲它必須是某種形式的數據庫錯誤。

+0

謝謝,但正如我所說我在'$ ret'上使用了'var_dump',這很好!唯一的問題是沒有值返回! – undone

+0

是的......但是如果你讀到我說的話,獲得NO VALUE的唯一方法是如果執行查詢,即mysql_query()返回一個錯誤。如果發生這種情況,$ result將是FALSE .... mysql_fetch_all中的測試永遠不會執行return語句....所以它將返回NULL作爲不執行返回的函數的默認值; ....你會得到NULL或在你的tems沒有價值。因此,查詢有錯誤。說實話,我不明白你爲什麼需要圍繞參數$ wid即{$ wid}的大括號。 – RiggsFolly

+0

我同意 - 嘗試返回空數組 - 將'return $ all'進一步移動一個括號'}'。 – Voitcus

1

你能檢查你的常量S, U, P, TB_PREFIXdefined(),它們是否有值。

而且修改功能mysql_fetch_all反正返回響應:

function mysql_fetch_all($result) { 
    $all = array(); 
    if ($result) { 
     while ($row = mysql_fetch_assoc($result)) { 
      $all[] = $row; 
     } 
    } 
    return $all; 
} 
1

我查看了所有您的意見。 在你的一個評論中你說過退貨不起作用,但我認爲它正常工作,因爲你在其中一個評論中已經說過,當你在return $ret之前打印出結果時,它會給你正確的結果。

事實:mysql_fetch_all($result)也返回結果。

結帳sql代碼:$q = "SELECT * FROM " . TB_PREFIX . "joblist where owner = {$wid} order by ID ASC";我不知道{$ wid}它是什麼。

測試它定義的函數getjobs爲$漚後陣

$q = "SELECT * FROM " . TB_PREFIX . "joblist where owner = '$wid' order by ID ASC"; 
1

試()

$ret=array(); //try 
0

我知道這是一個有點生疏的問題,但仍然有趣。你能找到解決方案嗎?

如果相同的代碼不會不同服務器上的工作,我會懷疑在這種情況下內存限制。嘗試增加php內存限制。

它可能是明智的檢查phpinfo()函數;在兩臺服務器上比較差異。

+0

我放棄了這個!正如你所看到的,沒有被接受的答案! – undone