为foreach()提供无效参数

时间:2015-10-15 15:12:32

标签: php

当我尝试使用我的某个功能时,我收到invalid argument supplied for foreach()错误。

我看了一些其他的例子,但找不到任何匹配的案例。

我的代码如下。

user.php的:

public function activateAccount($email = null, $email_code = null) {

        $field = 'email';
        $data = $this->_db->get('users', array($field, '=', $email));

        if($this->_db->count()) {
            $this->_data = $this->_db->first();
        }

        if($this->emailExists($email)) {
            if($this->data()->verified == 0) {
                $this->updateActivation('users', $email, array(
                    'verified' => 1
                ));
                return true;
            } else {
                return false;
            }
        }
        return false;

    }

public function updateActivation($table, $fields = array(), $email = null) {

        if(!$this->_db->updateActivation($table, $email, $fields)) {
            throw new Exception('An unexpected error occurred');
        }
    }

db.php中:

public function updateActivation($table, $email, $fields) {
        $set = '';
        $x = 1;

        foreach($fields as $name => $value) {
            $set .= "{$name} = ?";

            if($x < count($fields)) {
                $set .= ', ';
            }
            $x++;
        }

        $sql = "UPDATE {$table} SET {$set} WHERE email = {$email}";
        if(!$this->query($sql, $fields)->error()) {
            return true;
        }

        return false;
    }

如果需要更多代码,请告知我们。

非常感谢任何帮助。

谢谢!

2 个答案:

答案 0 :(得分:0)

参数列表中的顺序错误:

$this->updateActivation('users', $email, array('verified' => 1));

呼叫

updateActivation($table, $fields = array(), $email = null) {

我想它应该是

$this->updateActivation('users', array('verified' => 1), $email);

...

答案 1 :(得分:0)

public function updateActivation($table, $fields = array(), $email = null) {
User.php中的

错误地指定了变量。应该是

public function updateActivation($table, $email = null, $fields = array()) {

或者在执行函数时反转排序以匹配(我认为考虑到你的其他函数调用和赋值,前者是更好的方法)。

$this->updateActivation('users', array(
                    'verified' => 1
                ), $email);