gpt4 book ai didi

php - 为什么 SQLite3 错误不是异常?

转载 作者:行者123 更新时间:2023-12-02 12:14:41 25 4
gpt4 key购买 nike

我有 JSON-RPC 处理函数来处理这样的对象:

class Service {
public function sqlite_query($token, $filename, $query) {
if (!$this->valid_token($token)) {
throw new Exception("Access Denied: Invalid Token");
}
$db = new SQLite($filename);
$res = $db->query($query);
if ($res) {
if (preg_match("/^\s*INSERT|UPDATE|DELETE|ALTER|CREATE/i", $query)) {
return $db->rowAffected();
} else {
return $res->fetchAll();
}
} else {
throw new Error("Coudn't open file");
}
}
}

SQLite 是一个调用 SQLite 2 或 3 的类。代码捕获所有异常,但是当我尝试执行无效 SQL 时,我没有得到异常,而是通过此代码处理了 php 错误:

set_error_handler('error_handler');
ini_set('display_errors', 1);
ini_set('track_errors', 1);
ob_start();
function error_handler($err, $message, $file, $line) {
global $stop;
$stop = true;
$content = explode("\n", file_get_contents($file));
header('Content-Type: application/json');
$id = extract_id();
$error = array(
"code" => 100,
"message" => "Server error",
"error" => array(
"name" => "PHPErorr",
"code" => $err,
"message" => $message,
"file" => $file,
"at" => $line,
"line" => $content[$line-1]));
ob_end_clean();
echo response(null, $id, $error);
exit();
}

有没有办法让 SQLite 抛出异常?

最佳答案

是的,使用 PHP 的 PDO访问 SQLite3(不是 SQLite 函数)。 PDO 可以说是访问任何数据库(包括 SQLite3)的最佳方式,也是现在的标准和首选方式。您可以在实例化 PDO 对象时通过指定 \PDO::ATTR_ERRMODE =>\PDO::ERRMODE_EXCEPTION 使 PDO 抛出异常。

关于php - 为什么 SQLite3 错误不是异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34405430/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com