我想了解为什么会发生以下情况:
我在一个 PHP 文件(index.php)中有一个类的实例化和方法的使用register()
。问题是try catch
它不会出现异常,尽管如果它增加了 id 的自动增量,则不会在数据库中创建记录。如果我写错了查询,或者我尝试在 type 的字段中插入具有重复字段的记录,都没有关系UNIQUE
。下面是证据。基本上我想了解为什么不执行 catch 并且即使 Query 存在错误,也执行所有 try,不管我使用 Throwable、Exception 还是 PDOException。
index.php 代码:
<?php
require 'src/Classes/Account.php';
$reg = new Account();
$reg->register('Alfredossss', 'Serranosss', 'Prueba2sss');
echo "Registro Satisfactorio";
这个实例化来自 Account 类
Account.php 代码:
<?php
require_once 'database/Conexion.php';
class Account
{
public function register($username, $password, $email)
{
$pdo = Conexion::openConnection();
$sql = "INSERT INTO account (username, password, email, created_on) VALUES (?,?,?,now())";
try {
$pdo->beginTransaction();
$stmt= $pdo->prepare($sql);
$stmt->execute([$username, $password, $email]);
$pdo->commit();
Conexion::closeConnection();
} catch (\Throwable $th) {
echo "Mensaje de Error: " . $th->getMessage();
}
}
}
进而连接到 Connection 类的 database/Connection.php 文件
代码连接.php:
class Conexion
{
public static $db;
private static $user = '*****';
private static $password = '****';
public static function openConnection()
{
return self::$db = new PDO('pgsql:host=localhost;dbname=ajax', self::$user, self::$password);
}
public static function closeConnection()
{
self::$db = null;
}
}
SQL 代码:
CREATE TABLE account(
user_id serial PRIMARY KEY,
username VARCHAR (50) UNIQUE NOT NULL,
password VARCHAR (50) NOT NULL,
email VARCHAR (355) UNIQUE NOT NULL,
created_on TIMESTAMP NOT NULL,
last_login TIMESTAMP
);
我想我发现了为什么你没有抓住,将属性 PDO::ATTR_ERRMODE: 和 PDO::ERRMODE_EXCEPTION 添加到你的连接中以进行错误报告:
保持这种方式,您在查询中的任何错误都将被跳过。
在函数中,按照小伙伴说的这样试试: