【发布时间】:2014-07-01 06:20:32
【问题描述】:
我目前正在使用 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;
}
我的主要问题是 - 我如何在不破坏这个框架中极其复杂的东西的情况下纠正这个问题(无论如何,就我的水平而言)
更新:我真傻!我发现了问题。正如人们所建议的那样,我调用 $where 错误。 我打电话给它:
$accountinfo = $database->get('xf_user_field_value', ['field_value'], 1);
代替
$accountinfo = $database->get('xf_user_field_value', ['field_value'], ["user_id"=>1]);
(第三个参数是 $where)感谢大家的帮助!
【问题讨论】:
-
if (is_array($where)) $where['LIMIT'] = 1; -
如果你知道要重复问题的页面/函数,为什么不在 get 函数的开头转储 $where 变量呢?然后在它出错之前,您可以看到它的内容并知道它的名称和原因?
-
->get()怎么称呼?更具体地说,第三个论点是什么?您可以设置一个错误处理程序来捕获警告,然后在您不知道的情况下打印回溯。 -
$where 总是一个数组吗?如果是,那么这是一个非常简单的解决方案。
-
如果 $where 始终是一个数组,他就不会收到错误,说它是一个标量。这就是问题所在。