0

我使用这个https://github.com/ajillion/PHP-MySQLi-Database-Class

这是我的课

require_once ('class/MysqliDb.php');

class Foo {

    private  $db;

    public function __construct()
    {
        $this->db = MySqliDb::getInstance();
    }
}

 public function register($password, $email) {

        $password = @sha1($password);

        $query = $this->db
            ->where('email', $email)
            ->get('users');

        if (count($query) == 0)
        {

            $insertData = array(
                'email' => $email,
                'password' => $password
            );

            if($this->db->insert('users', $insertData)){
                return true;
            }

        }else{
            return FALSE;
        }
    }

我保存在 Db 中(如果count($query) == 0),但我也收到此错误

( ! ) Notice: Undefined property: MysqliDb::$_paramTypeList in /.../class/MysqliDb.php on line 356

如果我不写这个查询

$query = $this->db
                ->where('email', $email)
                ->get('users');

我没有错误。我可以在单个函数中进行多查询吗?以及我是如何遇到这个错误的MysqliDb::$_paramTypeList

4

1 回答 1

0

问题在于 MysqliDb.php 中的 reset() 函数

protected function reset()
{
    $this->_where = array();
    $this->_bindParams = array(''); // Create the empty 0 index
    unset($this->_query);           //<-- unsetting variables which could be resused
    unset($this->_whereTypeList);
    unset($this->_paramTypeList);
}

reset() 在每个执行方法之后运行,它取消设置 _paramTypeList 属性,而不是重新初始化它。因此,如果您使用相同的 db 对象运行第二个查询,则不再定义 _paramTypeList 属性。

您可以通过编辑 reset() 函数将这些变量重新初始化为 null 来解决此问题:

protected function reset()
{
    $this->_where = array();
    $this->_bindParams = array(''); // Create the empty 0 index
    $this->_query = null;
    $this->_whereTypeList = null;
    $this->_paramTypeList = null;
}
于 2014-01-06T06:07:57.740 回答