PHP简单函数不工作
我无法做出简单的回应 我有一个admin.class.phpPHP简单函数不工作,php,sql,function,Php,Sql,Function,我无法做出简单的回应 我有一个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
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中的echo代码
<?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; ?>
.
.
.
所以我的问题是,代码不起作用。我无法回显我的数据。你能帮帮我吗?这里有几个问题:
<?php echo $get_quota->daily_a; ?>
这将表明这只是一个空变量
但是,也请注意:
$get_quota = Admin::get_quota();
$sql = "SELECT * FROM quota";
$get_quota = Admin::find_by_sql($sql);
在这里,您从Admin
调用两个单独的方法,并将变量$get\u quota
设置为结果。第二个覆盖第一个。因此,get\u quota()
方法在这里对我们没有帮助:我们需要知道find\u by\u sql()
方法返回什么
编辑(将新代码添加到问题后)
您可以在遇到问题的函数中实现日志记录/回显:
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;
}
公共静态函数按\u sql($sql=”“)查找\u{
global$database;//注意这是错误的做法(1)。
$result\u set=$database->query($sql);
echo“Result Set:”.var\u export($Result\u Set,true)。“\n”//如果要从数据库中获取某些内容,则应返回这些内容。此外,在运行时删除这些内容(显然)。
如果(计数($result\u set)获取数组($result\u set)){
$object_array[]=self::instantiate($row);//确保instantiate函数返回一些东西!
}
echo“Object Array:”.var\u export($Object\u Array,true)。“\n”//仔细检查实例化函数是否正常工作
返回$object\u数组;
}
基于此代码,您的问题可能是实例化函数;如果没有返回任何内容,$object\u array
可能为空。(但不是空的!)
(1) 您应该避免像这样获取全局变量。相反,实例化一个保存和管理数据库连接的类。然后使您的
find\u by_sql
函数非静态,并有一个指向数据库的成员字段 为什么一个静态函数需要引用这个/self?@Zach-Leighton:否则你怎么调用一个方法呢?你已经“获得配额”两次了。撇开这一点不谈,你有没有试过亲自提出这个问题?你得到了什么?您希望从find\u by\u sql()
中得到什么?表配额的结构是什么?缺少很多细节…静态函数存在于类的“之前”和“之后”,基本上它们是函数,而不是方法。sub add(a,b){return a+b;}将是一个静态函数,它不依赖于对象/类。@Zach Leighton:你在说什么编程语言?静态函数是类定义成员。您必须使用类名或self
来调用它们。var\u dump
或var\u export
也将有效,但是在两者都不返回的事件中,添加一些硬编码字符串来证明echo正在运行是有用的。var\u dump
总是比echo
更有用-使用它,您可以区分null
、false
、0
和'
。使用echo
你只能继续猜测。首先,你会看到我更新了问题。其次,由于前面所述的原因,echo仍然有用。find_by_sql()方法:公共静态函数find_by_sql($sql=”“){global$database;$result_set=$database->query($sql);$object_array=array();而($row=$database->fetch_array($result_set)){$object_array[]=self::instantiate($row);}返回$object_array;}
是的,您是对的。配额为:空:(@kidi I更新了问题和答案。如果配额实际上是NULL
,而不仅仅是空的,那么你有一个更奇怪的问题,需要更多思考。
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;
}