Thinkphp5 PDO操作mysql预处理中文字段出错问题
Thinkphp5手册上建议不用中文表明和中文字段名
今天发现中文字出问题的地方了
$pdo = new PDO('mysql:host=localhost;dbname=xsfm_master', 'root','root' );
$pre = $pdo->prepare('UPDATE `ep购买` SET `支付宝`=:data__111 WHERE `id` = :where_id ');
$arr = [':data__111'=>'852',':where_id'=>'1'];
$pre->execute($arr);
中文字段是完全支持的
官网是这么说的
http://www.thinkphp.cn/topic/44305.html
但是 Thinkphp5中绑定是这么干的
"UPDATE `ep购买` SET `支付宝`=:data__支付宝 WHERE `id` = :where_id "
["data__支付宝"] => array(2) {
[0] => string(3) "998"
[1] => int(2)
}
["where_id"] => array(2) {
[0] => int(1)
[1] => int(1)
}
测试一下果然出错
$pre = $pdo->prepare('UPDATE `ep购买` SET `支付宝`=:data__支付宝 WHERE `id` = :where_id ');
$arr = [':data__支付宝'=>'852',':where_id'=>'1'];
$pre->execute($arr);

知道错误原因就容易解决了
我是这么干的
Thinkphp5.1 \thinkphp\library\think\db\Builder.php
P:103
elseif (is_scalar($val)) {
// 过滤非标量数据
if (0 === strpos($val, ':') && $query->isBind(substr($val, 1))) {
$result[$item] = $val;
} else {
$key = str_replace('.', '_', $key);
if (preg_match("/[\x7f-\xff]/", $key)) { //add_判断字符串中是否有中文
$query->bind('data__' . md5($key), $val, isset($bind[$key]) ? $bind[$key] : PDO::PARAM_STR);//add
$result[$item] = ':data__' . md5($key); //add
} else { //add
$query->bind('data__' . $key, $val, isset($bind[$key]) ? $bind[$key] : PDO::PARAM_STR);
$result[$item] = ':data__' . $key;
} //add
}
}
公司有人改这里用的是 base64_encode方法
想到Thinkphp5 Model返回的都是implement ArrayAccess 的对象,虽然可以以数组的方式访问,但是作者建议用$obj->id的方式访问,如果中文字段 $obj->数量,不优雅
20180112
thinkphp5.1.3我是这么干的

Thinkphp5 PDO操作mysql预处理中文字段出错问题的更多相关文章
- MySQL原生API、MySQLi面向过程、MySQLi面向对象、PDO操作MySQL
[转载]http://www.cnblogs.com/52fhy/p/5352304.html 本文将举详细例子向大家展示PHP是如何使用MySQL原生API.MySQLi面向过程.MySQLi面向对 ...
- php类模块引擎PDO操作MySQL数据库简单阐述
PDO是什么呢? 通俗说就是别人写的一个“数据库操作工具类”,它非常强大,可以应对市面上几乎所有主流数据库, 具体应用时候有这样一个关系: 即,要操作某种数据,就得去“打开”对应的pdo引擎. 在ph ...
- 使用EF操作Mysql数据库中文变问号的解决方案
问题场景:使用Entity Framework 6.0 操作Mysql数据库,中文保存至数据库后全部变成问号.但是使用Mysql API却不会. 原因排查:首先想到的肯定是数据库编码问题,一次查询了表 ...
- mysql 查询中文字段 没有结果的解决方法
代码如下: $conn = new mysqli('localhost', 'root', '', 'excel');$sql = "select 中信一级行业 from excel gro ...
- [mysql]brew 安装 配置 操作 mysql(中文问题)
mac 下卸载mysqldmg mac下mysql的DMG格式安装内有安装文件,却没有卸载文件--很郁闷的事. 网上搜了一下,发现给的方法原来得手动去删. 很多文章记述要删的文件不完整,后来在stac ...
- PDO操作mysql数据库(一)
PHP连接mysql数据库: <?php$server = "localhost";$user = "root";$pwd = "123456& ...
- Python操作MySQL以及中文乱码的问题
Python操作MySQL需要安装Python-MySQL可以从网上搜索一下,和一般的Python包一样安装 安装好之后,模块名字叫做MySQLdb ,在Window和Linux环境下都可以使用,试验 ...
- Mysql使用中文字段排序的实现--order by
在处理排序规则的时候,有时候我们会需要选择用一些中文字段来排序,实现我们在工作中的需求,下面是在处理排序的时候,适用的方式展示. SELECT t.lawcheckcolumnid AS id,t.c ...
- 使mysql按中文字段排序
http://ourmysql.com/archives/391 测试后我发现,gbk不仅对字符内容是按拼音排序的,对数字也是一样,使用时需注意! 另外一篇文章: MySQL按中文拼音排序
随机推荐
- js字符串、数组、时间、日期对象
js对字符串.数组.日期的操作是在以后项目中频繁使用的操作,所以呢....所以大家看着办,其实并不难哈,就是有点无聊,我承认这是我百度的,哈哈哈哈 <!DOCTYPE html><h ...
- Codeforces 724 G Xor-matic Number of the Graph 线性基+DFS
G. Xor-matic Number of the Graph http://codeforces.com/problemset/problem/724/G 题意:给你一张无向图.定义一个无序三元组 ...
- python基础教程总结9——模块,包,标准库
1. 模块 在python中一个文件可以被看成一个独立模块,而包对应着文件夹,模块把python代码分成一些有组织的代码段,通过导入的方式实现代码重用. 1.1 模块搜索路径 导入模块时,是按照sys ...
- IM云通信行业步入快车道,谁将成为代表中国的全球IM“独角兽”?
2016年,Twilio的成功上市,以及抢眼的股价表现,拓宽了全球云通信行业的想象空间,行业内公司估值水平也集体上调. 在中国,IM云通信行业也从2016年开始进入了一个“黄金发展时期”,一批如融云. ...
- 复杂UI的组织-创建者模式-uitableview思想
复杂节目的组织-创建者模式-uitableview思想 整体说明,部件规格说明
- webpack开始一个项目的步骤
这几天在学习Vue 用到了webpack打包工具 开始一个项目的时候 需要配置很多项 刚开始写的时候 配置文件总是缺什么再去配置什么 创建项目就用了半个小时 后来觉得应该有个步骤 这样 ...
- STL之map操作[转]
转自https://www.cnblogs.com/yutongzhu/p/5884269.html 作者彼得朱 map 是一种有序无重复的关联容器. 关联容器与顺序容器不同,他们的元素是按照关键字来 ...
- c++ 指针数组,输入4个季度的花费,计算出总花费
#include <iostream> #include <array> #include <string> const int Seasons = 4; cons ...
- java 会话跟踪技术
1.session用来表示用户会话,session对象在服务端维护,一般tomcat设定session生命周期为30分钟,超时将失效,也可以主动设置无效: 2.cookie存放在客户端,可以分为内存c ...
- 【主席树 启发式合并】bzoj3123: [Sdoi2013]森林
小细节磕磕碰碰浪费了半个多小时的时间 Description Input 第一行包含一个正整数testcase,表示当前测试数据的测试点编号.保证1≤testcase≤20. 第二行包含三个整数N,M ...