Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/254.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP简单函数不工作_Php_Sql_Function - Fatal编程技术网

PHP简单函数不工作

PHP简单函数不工作,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

我无法做出简单的回应

我有一个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中的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; 
}