2013-06-25 4 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); 
?> 

, когда я использую var_dump перед return $ret; в getjobs функции, она показывает мне правильные значения, но 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 Да, у него есть. Как я уже сказал: если я использую 'var_dump' прямо перед' return $ ret; 'в' getjobs', он показывает мне правильные значения. – undone

+0

@FDL спасибо, но я это знаю. – undone

ответ

1

Исходя из того, что вы только вернуть $ все из функции mysql_fetch_all ($ результат), если $ результат верен, я должен предположить, что 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

Спасибо, но, как я уже сказал, я использовал 'var_dump' на' $ ret', и все было хорошо! единственная проблема - не возвращается значение! – undone

+0

Да ... но если вы читаете то, что я сказал, единственный способ получить NO VALUE - это если выполнение запроса, то есть mysql_query(), возвращает ошибку. Если это произойдет, результат будет FALSE .... тест в mysql_fetch_all никогда не будет выполнять оператор return .... так что он вернет NULL значение по умолчанию для функции, которая не выполняет возврат; .... И вы получите NULL или в своих тем NO VALUE. Итак, у ВОПРОСА ОШИБКИ. Честно говоря, я не могу понять, зачем нужны фигурные скобки вокруг параметра $ wid i.e. {$ wid}. – RiggsFolly

+0

Я согласен - попробуйте вернуть пустой массив - переместите 'return $ all' one bracket'} 'дальше. – Voitcus

1

Не могли бы вы проверить, что ваши константы S, U, P, TB_PREFIX являются defined(), и у них есть значения.

Также измените функцию 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}, что это такое.

Попробуй

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

попытка после определения массива для $ RET в функции getjobs()

$ret=array(); //try 
0

Я знаю, что это немного ржавый вопрос, но всё же интересно. Можете ли вы найти решение?

Если такой же код не работает на разных серверах, я бы заподозрил в этом случае ограничение памяти. Попытайтесь увеличить предел памяти php.

И было бы разумно проверить phpinfo(); на обоих серверах для сравнения различий.

+0

Я сдался! как вы можете видеть, нет принятого ответа! – undone