【问题标题】:Mysql query failed but I'm not getting specific errorMysql 查询失败,但我没有收到特定错误
【发布时间】:2013-03-31 22:11:12
【问题描述】:

这里发生了一些非常奇怪的事情。我有这个方法用于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;
    }
}

一旦查询被执行,我会得到 $rows,一切都像魅力一样工作。但是当我尝试获取数组中的特定键时,我得到“查询失败:”没有特定消息: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 块,它就可以工作。

【问题讨论】:

  • return $rows 之前尝试var_dump($rows),它会打印什么?
  • 使用 var_dump 我得到了我应该得到的 array(1) { [0]=> array(5) { ["setting_wall_post"]=> string(1) "1" ["setting_status_tag"]=> string(1) "1" ["setting_photo"]=> string(1) "1" ["setting_like"]=> string(1) "1" ["setting_comment"]=> string(1) "1" } } 并且一旦我打印 $check 我得到这个 Array ( [0] => Array ( [setting_wall_post] => 1 [setting_status_tag] => 1 [setting_photo] => 1 [setting_like] => 1 [setting_comment] => 1 ) ) Query failed: 就像它正在执行一次一样:S
  • 该代码是否在循环中?

标签: php mysqli


【解决方案1】:

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

这就是为什么错误报告应始终不少于 E_ALL

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

} else {
    throw new Exception($this->conn->error);
}

这样您将有一个堆栈跟踪,它将显示调用链,指向导致特定错误的代码位置。

顺便说一句,整个功能对我来说似乎无法使用且容易出错。它对注入开放,并且需要比传统 SQL 更多的代码

【讨论】:

  • 哦,谢谢。它打印出我现在需要的一切。谢谢你的建议,我会努力改进的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-03-02
  • 2018-05-28
  • 1970-01-01
  • 1970-01-01
  • 2017-11-07
  • 2019-11-03
  • 2013-05-11
相关资源
最近更新 更多