-2

我目前正在使用 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]);

(第三个 arg 是 $where)感谢各位的帮助!

4

3 回答 3

1

是的,首先,我们需要找出不get应该的调用。这是整个问题。问题不在于函数本身,问题在于使用$where不是数组的参数调用它。更改库以修复一个错误的调用是荒谬的。

第 1 步:临时编辑get函数以包含变量print_r的a。$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;
}
于 2014-07-01T06:41:09.090 回答
1

->get()方法未正确调用。

不能将标量值用作数组

$where如果是true、数值或资源,则会显示该警告。有效的方法调用包括:

->get('table', '*')
->get('table', '*', array('WHERE' => 'foo = "bar"'))

检查手册并修复您的代码。

于 2014-07-01T06:46:35.970 回答
-2

编辑 3:尝试在 isset 语句内部移动,因为如果通过引用传递$where['LIMIT'] = 1;,您不希望传递LIMIT 1给查询构造函数。$where

免责声明我对 medoo 框架一无所知。

public function get($table, $columns, $where = null)
{
    if (is_null($where))
    {
        $where = array('LIMIT'=>1);
    }



    $data = $this->select($table, $columns, $where);

    return isset($data[0]) ? $data[0] : false;
}
于 2014-07-01T06:25:56.303 回答