2013-07-10 2 views
-2

Я не могу сделать простое эхо.PHP простая функция не работает

У меня есть admin.class.php

public static function get_quota() { 
    return self::find_by_sql("SELECT * FROM quota"); 
} 

public static function find_by_sql($sql="") { 
    global $database; 
    $result_set = $database->query($sql); 
    $object_array = array(); 
    while ($row = $database->fetch_array($result_set)) { 
    $object_array[] = self::instantiate($row); 
    } 
    return $object_array; 
} 

, и мой эхо-код в index.php

<?php 
    $admin = User::find_by_id($_SESSION['user_id']); 
    $admin_class = new Admin(); 
    $get_quota = Admin::get_quota(); 
    $sql = "SELECT * FROM quota"; 
    $get_quota = Admin::find_by_sql($sql); 
?> 
. 
. 
. 
<?php echo $get_quota->daily_a; ?> 

Так что моя проблема заключается в том, что код не работает. Я не могу повторить свои данные. Не могли бы вы мне помочь?

+1

Почему статическая функция должна ссылаться на это/я? –

+1

@ Zach Leighton: как бы вы назвали метод иначе? – zerkms

+0

Вы дважды получаете квоту. Что в стороне, вы пытались выдать запрос вручную? Что ты получил ? Что вы ожидаете от 'find_by_sql()'? Какова структура таблицы 'quota'? Так много деталей не хватает ... –

ответ

0

У вас есть несколько проблем здесь:

<?php echo $get_quota->daily_a; ?> 

Эта строка ссылается на $get_quota переменную и ищет поле члена daily_a. Попробуйте следующее:

<?php echo "Quota is:".var_export($get_quota->daily_a,true); ?> 

Это покажет, что это просто пустая переменная.

Однако также отметить:

$get_quota = Admin::get_quota(); 
$sql = "SELECT * FROM quota"; 
$get_quota = Admin::find_by_sql($sql); 

Здесь вы вызываете два отдельных методов из Admin и установки переменной $get_quota к результату. Второй перезаписывает первый. Поэтому метод get_quota() не помогает нам здесь: нам нужно знать, что возвращает ваш метод find_by_sql().

EDIT (Post новый код добавляется на вопрос)

Вы можете осуществить регистрацию/вторя внутри функции вы проблемы с:

public static function find_by_sql($sql="") { 
    global $database; //Note this is bad practice (1). 
    $result_set = $database->query($sql); 
    echo "Result Set: ".var_export($result_set,true)."\n";//This should return something if you're getting something back from the database. Also, remove this for runtime (obviously). 

    if (count($result_set) <= 0) { //constraint checking is always good! And cheap! 
    error_log("An unexpected number of rows (0) was received from the database for query='".$sql."'."); 
    } 

    $object_array = array(); 
    while ($row = $database->fetch_array($result_set)) { 
    $object_array[] = self::instantiate($row); //Ensure that the instantiate function returns something! 
    } 

    echo "Object Array: ".var_export($object_array, true)."\n";//double-check your instantiate function is working 
    return $object_array; 
} 

На основе этого кода, ваша проблема вероятно, с помощью функции-экземпляра; если он ничего не возвращает, $object_array, вероятно, пуст. (Но не null!).

(1) Вам следует избегать захвата глобальных переменных, подобных этому. Вместо этого создайте экземпляр класса, который поддерживает и управляет вашим подключением к базе данных. Затем сделайте свою функцию find_by_sql нестатической и укажите поле члена, указывающее на вашу базу данных.

+1

Как насчет 'var_dump()'? – zerkms

+0

'var_dump' или' var_export' также будут действительны, но в случае, когда ни одно из них не возвращает, полезно использовать некоторые строки с жестким кодом, чтобы доказать, что эхо работает. –

+0

'var_dump' ** всегда ** более полезно, чем' echo' - используя его, вы можете различать 'null',' false', '0' и' '' '. С помощью 'echo' вы можете только * продолжить угадывание *. – zerkms

Смежные вопросы