如何在PHP中返回失败的MySQL查询

时间:2018-10-04 10:06:51

标签: php mysqli

我在下面有两个查询。仅根据$ methodtype变量查询一个。

if ($methodtype == 'group'){

    $stmt = $connection->prepare("SELECT group_id FROM usergroup_list WHERE usergroup = ?");
    $stmt->bind_param('s', $usergroup);
    $stmt->execute();
    $result = $stmt->get_result();
    while ($row = $result->fetch_assoc()) {
        foreach ($row as $value) {
            $newgroupid = $value;
        }
    }
    $result->free_result();

    $stmt = $connection->prepare("UPDATE `usergroup_privs` SET `status` = ? WHERE group_id = ? and function = ?");
    $stmt->bind_param('iss', $privbvalue, $newgroupid, $privname);

} elseif ($methodtype == 'user') {

    $stmt = $connection->prepare("SELECT user_id FROM user_list WHERE username = ?");
    $stmt->bind_param('s', $usergroup);
    $stmt->execute();
    $result = $stmt->get_result();
    while ($row = $result->fetch_assoc()) {
        foreach ($row as $value) {
            $newgroupid = $value;
        }
    }
    $result->free_result(); 

    $stmt = $connection->prepare("UPDATE `user_list` SET `44` = ? WHERE user_id = ?");
    $stmt->bind_param('ii', $privbvalue, $newgroupid);

}

然后我运行第二段代码,以输出更改后的值,或者一条消息,指示查询失败(建议在SQL内部执行错误)。

if ($stmt->execute()) {
    echo json_encode([true, 'Changed ' . $privname . ' to ' . 
strtoupper($privvalue)]);
} else {
    echo json_encode([false, 'Delete Unsuccessful - SQL Error']);
}

$stmt->close();

但是第二部分似乎不起作用。如果SQL中有错误,则页面只会生成500错误。可能我错误地遵循了一些指南,但是从我所见,这应该行得通吗?

任何帮助澄清这一点的方法将不胜感激!

1 个答案:

答案 0 :(得分:0)

如果您使用的是PDO(上面的示例看起来像一个例子),请在创建连接$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);时尝试使用此代码将PDO模式设置为Exception,然后使用try&catch块来捕获异常。

引用:How to view query error in PDO PHP