首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何在每次连接时使PDO运行SET NAMES utf8,在ZendFramework中

在Zend Framework中,您可以通过在模块配置文件(例如module.config.php)中设置driver_options来实现每次连接时运行SET NAMES utf8。以下是如何实现这一目标的示例:

  1. 打开模块配置文件(例如module.config.php)。
  2. service_manager下的factories数组中找到Zend\Db\Adapter\Adapter的工厂。
  3. 修改工厂以添加driver_options

以下是一个示例:

代码语言:php
复制
return [
    'service_manager' => [
        'factories' => [
            Zend\Db\Adapter\Adapter::class => function ($container) {
                $config = $container->get('config');
                $dbAdapterConfig = $config['db'];

                $adapterFactory = new Zend\Db\Adapter\AdapterServiceFactory();
                $adapter = $adapterFactory->createService($container, 'Zend\Db\Adapter\Adapter', $dbAdapterConfig);

                // 在此处添加驱动程序选项以设置字符集
                $driver = $adapter->getDriver();
                $driver->getConnection()->connect();
                $driver->getConnection()->execute('SET NAMES utf8');

                return $adapter;
            },
        ],
    ],
];

这将确保每次连接到数据库时,都会运行SET NAMES utf8,从而将字符集设置为UTF-8。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

php持久化连接数据库

php的持久化数据库连接已经不是一个新鲜的名词了,由于php语言生命周期的问题,如果每次连接数据库都重新打开一个连接会很低效,所以引入了长连接机制(应该是实现在sapi部分,例如cli sapi就不支持...db长连接),本文探究apache2handler sapi和 fpm sapi是否支持db长连接.使用方法以pdo为例实例化pdo对象传入: PDO::ATTR_PERSISTENT => true...即可实现长连接,但是隐约在哪里听说过apache下由于是以线程的方式执行,所以连接在线程关闭也会释放掉.本着实践是检验真理的唯一标准态度,遂决定做个实验测试下....:MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8', //PDO::ATTR_PERSISTENT => true #pdo默认为false...(0.00 sec) 将测试脚本PDO::ATTR_PERSISTENT => true的注释取消掉后执行脚本,再查看数据库连接: mysql> show full processlist; +--

2K30
  • PDO对象与mysql的连接超时

    php每一个new的PDO对象,都会去连接mysql,都会创建一条tcp连接.当pdo对象赋予的变量是一个的时候,那么他只会保持一个tcp连接,没有被引用的对象连接会直接断掉.如果不对这个对象进行任何操作...如果使用了长连接参数,那么不管循环执行几次new PDO,只会有一个tcp连接 关于超时现象,网上的资料大部分说受两个参数interactive_timeout和wait_timeout影响,但是经过我测试...,修改了这两个参数,如果10秒没有任何操作,连接仍然会被mysql断掉,不管是使不使用长连接参数....new PDO对象,或者每隔循环一定次数确保10秒内重新new PDO对象 测试过程如下: 开一个终端,不停的查看当前的连接情况 while true;do clear;date;netstat -...pdo->query("set names utf8"); sleep(11); }

    3.6K20

    PHP PDO与mysql的连接单例防止超时情况处理

    这个数据库类主要处理了单例模式下创建数据库对象,如果有两次较长时间的间隔去执行sql操作,再次处理会出现连接失败的问题,利用一个cache数组存放pdo对象与时间戳,把两次执行之间的时间进行了比较,如果间隔超过了...10秒就再次new PDO创建连接,没有超过的情况下会继续使用原来的连接,并且因为每次使用后会使连接续期,cache数组里的时间戳也进行了续期....每次执行操作都会从cache数组获取下连接,多次执行不超过10秒的情况下,只会有一个连接 代码实现读写分离,判断sql语句前面6个字符是select的就查询从库,其余操作查询主库.主库和从库就是分别在配置数组...0和1创建不同的PDO对象连接 代码如下: <?...names ' .

    1.8K10

    PHP连接MySQL数据库的三种方式(mysql、mysqli、pdo)

    PHP与MySQL的连接有三种API接口,分别是:PHP的MySQL扩展 、PHP的mysqli扩展 、PHP数据对象(PDO) ,下面针对以上三种连接方式做下总结,以备不同场景下选出最优方案。...PHP5.3活跃 仅维护 MySQL新项目中的建议使用程度 建议 - 首选 建议 不建议 API的字符集支持 是 是 否 服务端prepare语句的支持情况 是 是 否 客户端prepare语句的支持情况...("set names 'utf8'");//编码转化 $select_db = mysql_select_db($mysql_conf['db']); if (!...$mysqli->connect_error);//诊断连接错误 } $mysqli->query("set names 'utf8';");//编码转化 $select_db = $mysqli->select_db...$mysql_conf['db'], $mysql_conf['db_user'], $mysql_conf['db_pwd']);//创建一个pdo对象 $pdo->exec("set names '

    8.1K40

    PHP PDO & Injection Bypass

    模拟预处理是防止某些数据库不支持预处理而设置的,初始化PDO驱动,可以设置一项参数,PDO::ATTR_EMULATE_PREPARES,作用是打开模拟预处理(true)或者关闭(false),默认为...注: 1.为什么DSN中指定了charset, 还需要执行set names 呢?...也就是说,如果数据表使用gbk字符集,而PHP程序使用UTF-8编码,我们执行查询前运行set names utf8, 告诉mysql server正确编码即可,无须在程序编码转换。...省却了程序的转换编码问题,不要有疑问,这样做不会产生乱码。 那么DSN中指定charset的作用是什么?...只是告诉PDO, 本地驱动转义使用指定的字符集(并不是设定mysql server通信字符集),设置mysql server通信字符集,还得使用set names 指令。

    1K20

    PHP连接MySQL数据库的三种方式实例分析【mysql、mysqli、pdo

    分享给大家供大家参考,具体如下: PHP与MySQL的连接有三种API接口,分别是:PHP的MySQL扩展 、PHP的mysqli扩展 、PHP数据对象(PDO) ,下面针对以上三种连接方式做下总结,以备不同场景下选出最优方案...PHP5.3活跃 仅维护 MySQL新项目中的建议使用程度 建议 – 首选 建议 不建议 API的字符集支持 是 是 否 服务端prepare语句的支持情况 是 是 否 客户端prepare语句的支持情况...set names 'utf8'");//编码转化 $select_db = mysql_select_db($mysql_conf['db']); if (!...$mysqli- connect_error);//诊断连接错误 } $mysqli- query("set names 'utf8';");//编码转化 $select_db = $mysqli- select_db...$mysql_conf['db'], $mysql_conf['db_user'], $mysql_conf['db_pwd']);//创建一个pdo对象 $pdo- exec("set names '

    2.1K41

    PHP结合Redis+MySQL实现冷热数据交换应用案例详解

    交换:将Redis的数据周期的存储到MySQL 业务流程 用户进行投票后,首先将投票数据保存到Redis,这些数据就是热数据,然后定期(5s)将热数据保存到MySQL,这些数据就变为冷数据,然后将冷数据从...:time',time()); 重点内容 这个文件主要实现冷热数据交换,首先连接MySQL数据库和redis服务器,然后每隔5秒去执行while循环,while循环里获取自增长的投票主键和最近一次插入...php //连接数据库 $pdo = new PDO('mysql:host=localhost;dbname=test','root','1234'); $pdo- query('set names...utf8'); //连接redis $redis = new Redis(); $redis- connect('localhost',6379); //永真循环 while(true){ $vid...运行步骤: 1、使用php命令行工具调用swap.php ? 2、使用Apache的ab工具进行压力测试。 ?

    99351

    初涉web安全

    最近看了些web安全方面的文章,略有心得,写这篇文章来整理下思路,如有错误,恳请斧正 SQL注入 原理:web表单输入恶意sql语句 防御:对用户输入的进行处理,永远不要相信前端js对表单的验证,js...;charset=utf8", "user", "pass");//连接数据库,并设置本地PDO驱动编码格式 $dbh->setAttribute(PDO::ATTR_EMULATE_PREPARES,...false); //禁用模拟预处理(非常重要) $dbh->exec("set names 'utf8'"); //设定mysql服务器编码格式 $sql="select * from test where...execute(); //执行 $result = $stmt->fetchAll(); //得到结果集 echo json_encode($result);//输出 $dbh = null;//取消连接...XSS攻击 原理:web表单输入恶意js脚本 防御:对用户输入的进行处理,过滤特殊字符 主要方法: 使用框架自带方法 比如说tp框架:I('get.xxx') 使用PHP过滤函数 htmlspecialchars

    52850

    PDO详解

    PHP,有三种数据库连接方式: (1)mysql 最常用,过程式风格的一种应用 (2)mysqli,mysql函数的增强版,提供面向对象和过程两种风格的API,增加了预编译和参数绑定等新的特性 (3..."); //设置异常可捕获 $db->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION); $db->exec("set names...处理客户输入的信息,如果是整型变量,就是用intval()把传入的参数转化为一个数值。...六、PDO的效率问题 PDO比mysql、mysqli的连接更为稳定,但在效率上却不一定比直连更好。而且实际应用,数据库迁移的情况不是很多,PDO更无法保证一次编写,到处运行。...所以推荐新应用中考虑使用PDO旧的应用则没有必要进行重构。

    2K81

    php pthreads多线程的安装与使用

    > 多线程与共享内存 共享内存的例子,没有使用任何锁,仍然可能正常工作,可能工作内存操作本身具备锁的功能 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18...";dbname=$dbname", $dbuser, $dbpw, array( PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES \'UTF8\'', PDO::...";dbname=$dbname", $dbuser, $dbpw, array( PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES \'UTF8\'', PDO::...> 八、多线程与数据连接 pthreads 与 pdo 同时使用是,需要注意一点,需要静态声明public static $dbh;并且通过单例模式访问数据库连接。...> 多线程操作数据库总结 总的来说 pthreads 仍然处在发展,仍有一些不足的地方,我们也可以看到pthreads的git不断改进这个项目 数据库持久链接很重要,否则每个线程都会开启一次数据库连接

    78830
    领券