我目前正在使用medoo.php框架,虽然我通常会在github上使用他们的票务区,但似乎没有人真正使用它......所以... 无论如何,当我运行我的一个使用“require”来调用框架的文件时,我收到以下错误:
警告:不能在第759行的/home/..../public_html/projects/friendcodes/medoo.min.php中使用标量值作为数组
然而,当我检查代码时(下面是第752行到第764行),我发现它实际上应该检查$ where是否未设置,如果不是,则将其设为数组 - 但是这个php错误要求不同。
我猜测$where
被设置为其他地方的变量,这不是一个数组,但是框架中有超过100次出现的变量,以及830行代码,你可能不知道我不想看。 (请在评论中告诉我,我会添加它 - 再次,这是直接来自medoo最近的两个更新/发布。)
public function get($table, $columns, $where = null)
{
if (!isset($where))
{
$where = array();
}
$where['LIMIT'] = 1;
$data = $this->select($table, $columns, $where);
return isset($data[0]) ? $data[0] : false;
}
我的主要问题是 - 如何在不违反此框架的情况下纠正此问题,这非常复杂(对于我的级别,无论如何)
更新:我真傻!我发现了这个问题。就像人们建议的那样,我在说错了。 我用它来称呼它:
$accountinfo = $database->get('xf_user_field_value', ['field_value'], 1);
而不是
$accountinfo = $database->get('xf_user_field_value', ['field_value'], ["user_id"=>1]);
(第三个arg是$ where)感谢帮助人员!
答案 0 :(得分:1)
是的,首先,我们需要找出不应该调用get
的内容。这是一个完整的问题。问题不在于函数本身,问题是使用$where
的参数调用它而不是数组。更改库以修复一个错误的调用是荒谬的。
第1步:暂时修改get
功能,以包含print_r
变量的$where
。
public function get($table, $columns, $where = null)
{
if(isset($where)) print_r($where);
if (!isset($where))
{
$where = array();
}
$where['LIMIT'] = 1;
$data = $this->select($table, $columns, $where);
return isset($data[0]) ? $data[0] : false;
}
这会在错误打印$where
的值之前向我们显示,这有助于您找到格式错误的get
来电。
如果失败,请尝试使用PHP的内置回溯来尝试查找问题:
public function get($table, $columns, $where = null)
{
if(isset($where)) print_r(debug_backtrace());
if (!isset($where))
{
$where = array();
}
$where['LIMIT'] = 1;
$data = $this->select($table, $columns, $where);
return isset($data[0]) ? $data[0] : false;
}
答案 1 :(得分:1)
未正确调用->get()
方法。
不能将标量值用作数组
如果$where
是true
,数字值或资源,则会显示该警告。有效的方法调用包括:
->get('table', '*')
->get('table', '*', array('WHERE' => 'foo = "bar"'))
检查manual并修复您的代码。
答案 2 :(得分:-2)
编辑3 :尝试在isset语句中移动$where['LIMIT'] = 1;
,因为如果{{1}您不想将LIMIT 1
传递给查询构造函数}通过引用传递。
免责声明我不了解medoo框架。
$where