Mysql查询失败但我没有得到具体的错误

时间:2013-04-09 13:00:33

标签: php mysqli

这里真的很奇怪。我有这个方法用于mysqli查询。

    public function select($options) {
    $default = array (
        'table' => '',
        'fields' => '*',
        'condition' => '2',
        'order' => '1',
        'limit' => 50
    );
    $options = array_merge($default,$options);
    $query = "SELECT {$options['fields']} FROM {$options['table']} WHERE {$options['condition']} ORDER BY {$options['order']} LIMIT {$options['limit']}";
    if ($result = $this->conn->query($query)) {
        while ($row = $result->fetch_assoc()) {
            $rows[] = $row;
        }
        return $rows;
    } else {
        printf("Query failed: %s\n", $mysqli->error);
        exit;
    }
}

一旦查询被执行,我得到$行,一切都像魅力一样。但是当我尝试获取数组中的特定键时,我得到“查询失败:”而没有特定的消息:S

$options = array(
        'table' => 'settings',
        'fields' => 'setting_wall_post,setting_status_tag,setting_photo,setting_like,setting_comment',
        'limit' => '1',
        'condition' => "setting_id = 6",
    );
    $check = $this->mysql->select($options);    
    print_r($check);
    $check = $check[0];

    if($check["setting_wall_post"]) //if I comment out this IF block it works :(
        $this->scope["wall_post"] = "publish_stream";

此外,我试图关闭mysqli连接,然后我得到

Warning: mysqli::query() [mysqli.query]: Couldn't fetch mysqli

这个IF块的作用就像它与mysqli:S

一样

所以问题是,这里的问题是什么?为什么我无法访问“setting_wall_post”?我想这部分是问题,因为如果我注释掉IF块,它就可以了。

1 个答案:

答案 0 :(得分:2)

编辑。我真是个傻瓜,忽略了这样一个错字:$this->conn必须使用而不是未定义的$mysqli

这就是为什么总是应该有错误报告不低于E_ALL

您发布的代码不会导致此类错误 将您的错误报告代码更改为此

} else {
    throw new Exception($this->conn->error);
}
通过这种方式,您将拥有一个堆栈跟踪,它将显示调用链,指向导致特定错误的代码位置。

BTW,整个功能看起来无法使用,而且容易出错。它是开放的注入,需要比传统SQL更多的代码