admin 发布的文章

1.Chrome 浏览器:
打开 Chrome 浏览器。
。 输入chrome://net-internals/#hsts 并回车。
。在"Delete domain security policies"下输入你的域名,然后点击"Delete"。

  1. Firefox 浏览器:
    打开 Firefox 浏览器。
    输入about:preferences#privacy 并回车。
    搜索"Site Data",点击"Clear Data",选择"Cookies and Site Data",然后点击
    "Clear".

namespace xxxx\db;

use PDO;
use PDOException;

/**

  • 数据库类
    */

class Db
{

private static $pdo=null;
public static function pdo(){
    if(self::$pdo!==null){
        return self::$pdo;
    }
    define('DB_TYPE', 'kdb');
    define('DB_PARAMS', [
        // 'search_path'=>DB_NAME,
        ]);
    
    try {
        $dsn = sprintf('%s:host=%s;dbname=%s;port=%s;',DB_TYPE,DB_HOST,DB_NAME,DB_HOSTPORT);
        if(DB_CHARSET){
            if(DB_TYPE=='kdb'){
                $dsn .= 'options=--client_encoding='.DB_CHARSET.';';
            }else{
                $dsn .= 'charset='.DB_CHARSET.';';
            }
        }
        if(DB_PARAMS){
            if(DB_TYPE=='kdb'){
                $dsn .= 'options=';
                foreach (DB_PARAMS as $key => $value) {
                    $dsn .= '--'.$key.'='.$value.',';
                }
                $dsn=rtrim($dsn, ',');
            }else{
                foreach (DB_PARAMS as $key => $value) {
                    $dsn .= $key . '=' . $value.';';
                }
            }
        }
        $option =[
            PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
            PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
            // PDO::ATTR_EMULATE_PREPARES => false,
            // PDO::ATTR_STRINGIFY_FETCHES => false,
        ];
        return self::$pdo = new PDO( $dsn ,DB_USER, DB_PASS, $option);

    } catch (PDOException $e) {
        echo 'Connection Failed: ' . $e->getMessage();
    }
}

}

function executeWithTransaction(callable $callback) {
    try {
        Db::pdo()->beginTransaction();
        $callback();
        Db::pdo()->commit();
    } catch (Exception $e) {
        Db::pdo()->rollBack();
        error_log($e->getMessage());
        throw $e; // 可选:重新抛出异常以便上层处理
    } finally {
        if (Db::pdo()->inTransaction()) {
            Db::pdo()->rollBack();
        }
    }
}

// 使用封装的函数
executeWithTransaction(function () {
    Db::pdo()->exec("INSERT INTO table1 (column1) VALUES ('value1')");
    die('ssss'); // 这里仍然会终止脚本,但事务会被正确回滚
});