gpt4 book ai didi

php - PDO 在 MYSQL_ATTR_INIT_COMMAND 中设置 session 和设置名称

转载 作者:行者123 更新时间:2023-12-01 00:38:42 25 4
gpt4 key购买 nike

我正在尝试建立我的 UTF-8 连接,但我不能,由于某种原因,如果我在 MYSQL_ATTR_INIT_COMMAND 中删除 SET SESSION,我的系统就会崩溃 然后我不能改变这个 MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8'

这有效,看起来不错的特殊字符,但不能创建新帐户:

array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));

这是我的代码:

<?php
class DB {
private static $_instance = null;
private $_pdo, $_query, $_error = false, $_results, $_resultsArray, $_count = 0, $_lastId, $_queryCount=0;

private function __construct(){
try{
$this->_pdo = new PDO('mysql:host=' .
Config::get('mysql/host') .';dbname='.
Config::get('mysql/db'),
Config::get('mysql/username'),
Config::get('mysql/password'),
array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET SESSION sql_mode = ''"));
} catch(PDOException $e){
die($e->getMessage());
}
}
}

知道如何在不破坏我的代码的情况下实现它吗?

最佳答案

这总是让我想知道,为什么 PDO 用户如此着迷于运行常规 SQL 查询一些棘手的方式,而不是仅仅运行它,使用专用于此任务的常规函数​​。

private function __construct(){
$this->_pdo = new PDO('mysql:host=' .
Config::get('mysql/host') .';dbname='.
Config::get('mysql/db'),
Config::get('mysql/username'),
Config::get('mysql/password'),
array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
$this->_pdo->query("SET SESSION sql_mode = ''");
$this->_pdo->query("SET NAMES utf8");
}

您会看到,连接后,您可以根据需要运行任意数量的额外 SQL 查询。

请注意,如果在 DSN 中设置字符集对您不起作用,这意味着您的 PHP 版本非常过时,您应该尽快升级。当然不是针对字符集问题,而是针对自您的版本被废弃以来这些年来发布的所有安全修复

另请注意,您的类(class)存在许多设计缺陷。我建议你阅读我写的文章,Your first database wrapper's childhood diseases并修复错误报告、状态变量和许多其他问题,我相信这些问题存在于您类(class)的其余部分

关于php - PDO 在 MYSQL_ATTR_INIT_COMMAND 中设置 session 和设置名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40077255/

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