2013-06-25 22 views
5

Ich habe eine Klasse, die gut mit PHP 5.3 (XAMPP 1.7.3, Windows 7) funktioniert aber nicht auf meinem Server (php 5.2.17 - Sicherer Modus On) :PHP-Funktion gibt keinen Wert zurück

<?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(); 

?> 

Und in einer anderen Datei, habe ich getjobs Funktion:

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

wenn ich var_dump Recht vor return $ret; in getjobs Funktion zu verwenden, es korrekten Werte zeigt mir, aber var_dump($tempbJobs); wird Drucken NULL.

P.S: Ich habe den Code vereinfacht, es funktioniert auf meinem localhost, aber nicht auf dem Produktionsserver.
PS: Wenn ich ändern return $ret; zu return 'DUMPED'; würde zurückgegebene Wert string(6) "DUMPED"

var_dump($ret); ausgegeben:

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

hat Ihr Produktionsserver Daten? – DevZer0

+0

@ DevZer0 Ja, es hat. Wie gesagt: Wenn ich 'var_dump' direkt vor' return $ ret; 'in' getjobs' Funktion verwende, zeigt es mir korrekte Werte an. – undone

+0

@FDL danke, aber ich weiß das. – undone

Antwort

1

Basierend auf der Tatsache, dass Sie nur $ alle von der Funktion mysql_fetch_all ($ result) zurück, wenn $ Das Ergebnis ist wahr. Ich muss davon ausgehen, dass mysql_query() false zurückgibt.

Nach dem Aufruf von

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

Können Sie fügen Sie diese

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

Dies identifizieren helfen könnte, was das Problem tatsächlich ist, da es ein Datenbankfehler von einer Art sein muss.

+0

Danke, aber wie gesagt, ich habe 'var_dump' auf' $ ret' verwendet und es war in Ordnung! Das einzige Problem ist, dass kein Wert zurückgegeben wird! – undone

+0

Ja ... aber wenn Sie lesen, was ich gesagt habe, ist die einzige Möglichkeit, KEIN WERT zu erhalten, wenn die Ausführung der Abfrage, d. H. Mysql_query(), einen Fehler zurückgibt. Wenn das passiert, wird $ result den Wert FALSE haben .... der Test in mysql_fetch_all wird niemals die return-Anweisung ausführen .... so wird NULL als Standard für eine Funktion zurückgegeben, die keine return ausführt; .... Und du wirst NULL bekommen oder in deinen TEMPERN KEIN WERT. Daher hat die Frage einen Fehler. Um ehrlich zu sein, kann ich nicht sehen, warum Sie die geschweiften Klammern um den Parameter $ wid, d. H. {$ Wid}, benötigen. – RiggsFolly

+0

Ich stimme zu - versuchen Sie, leere Array zurückzugeben - bewegen 'return $ all' eine Klammer '}' weiter. – Voitcus

1

Konnten Sie überprüfen, dass Ihre Konstanten S, U, P, TB_PREFIXdefined() sind und sie Werte haben.

ändern sich auch Ihre Funktion mysql_fetch_all Antwort zurück trotzdem:

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

ich Ihre Kommentare überprüft. In einem Ihrer Kommentare haben Sie gesagt, dass die Rückgabe nicht funktioniert, aber ich denke, es funktioniert ordnungsgemäß, weil Sie bereits in einem Ihrer Kommentare gesagt, dass wenn Sie das Ergebnis vor return $ret ausdrucken, gibt es das richtige Ergebnis.

Tatsache:mysql_fetch_all($result) auch Ergebnis zurückgeben.

check the sql code: $q = "SELECT * FROM " . TB_PREFIX . "joblist where owner = {$wid} order by ID ASC"; Ich weiß nicht {$ wid} was es ist.

Testen Sie

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

Versuch nach für $ ret in der Funktion getjobs definieren Array()

$ret=array(); //try 
0

Ich weiß, das ein wenig rostig Frage ist aber trotzdem interessant. Können Sie darauf eine Lösung finden?

Wenn der gleiche Code nicht auf einem anderen Server funktioniert, hätte ich in diesem Fall Speicherlimit vermutet. Versuche das php Speicherlimit zu erhöhen.

Und es könnte klug sein, phpinfo() zu überprüfen; auf beiden Servern, um Unterschiede zu vergleichen.

+0

Ich habe das aufgegeben! Wie Sie sehen können, gibt es keine akzeptierte Antwort! – undone