如何让thinkphp在获取数据库字段信息时区分数据库字段大小写
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何让thinkphp在获取数据库字段信息时区分数据库字段大小写相关的知识,希望对你有一定的参考价值。
解决办法:就是修改thinkphp的源码中的Library/Db/Driver.class.php文件,把
PDO::ATTR_CASE => PDO::CASE_LOWER 改为 PDO::ATTR_CASE => PDO::CASE_NATURAL,
或者在配置文件里面增加
DB_PARAMS’ => array(\PDO::ATTR_CASE => \PDO::CASE_NATURAL) 这一句。
第一次使用的时候这种解决方法果然可以,但是做另外一个项目的时候却始终不生效,无奈,百度了半天,找到一个方法,因为thinkphp执行的时候默认会把大写转换成小写,所以我们找到它的源码不让它转换就行。
修改Common/functions.php里面的parse_name函数源码为:
function parse_name($name, $type=0)
/* if ($type)
return ucfirst(preg_replace_callback('/_([a-zA-Z])/', function($match)return strtoupper($match[1]);, $name));
else
//这里会将数据库表名里的大写转换为 _小写,修改成不转换
return strtolower(trim(preg_replace("/[A-Z]/", "_\\0", $name), "_"));
*/
return $name;
其中注释掉的是原来的,未注释是新增的。
修改Library/Think/Model.class.php里面的getTableName函数:
//$this->trueTableName = strtolower($tableName); //这里会将表名转换成小写,修改成不转换
$this->trueTableName = $tableName;
修改其中一句,这样就可以解决数据库字段名大写的问题。 参考技术A 现在的数据库管理系统(如SQL Sever、Oracle等)在安装时都有选项,可选择区分或不区分。在WINDOWS下,一般默认是不区分的。
通常来说,专用于WINDOWS下的数据库是不的。本回答被提问者和网友采纳 参考技术B mysql字符集utf8_general_cs 大小写敏感
THINKPHP如何获取一个表2个字段中相同的数据
如图,我的想法是先根据字段 tel 查询出【王五】的一条数据,然后提取【王五】的 tel作为条件再对表进行查询。查询出与字段btel相同的数据。但是新手不知道如何下手 = =,大神求救~~能写出PHP代码更感激不尽!
附上我的代码:
<?php
class JzAction extends IndAction
public $id;
public function index()
$id = $this->id;
$Data = M('userinfo');
$where['id']=array('eq',$id);
$this->data = $Data->where($where)->select();
?>
输出结果:
id name tel btel
3 王五 1589456125 1589456125
这个用OR查询就可以了
(tel = '158XXXX') OR (brel = '158XXXX')
//这里是TP的写法//不知道对不对
//你可以测试一下
//我一般都是用M() -> query(SQL语句)这样去写的
$model = M('表名');
$where['tel'] = array('eq','1589456125');
$where['btel'] = array('eq','1589456125');
$where['_logic'] = 'OR';
$model -> where($where) -> oreder('id DESC') -> select();追问
感谢您的回答,是这样的,1589456125这个值并不是固定的。是根据用户的ID获取的。
意思是,我之前写了一段代码,自动判定到当前访问的用户ID,然后根据该用户的tel 查询btel和他tel相同的用户数据
所以我的想法是提取第一次查询结果的tel值,然后再次对这个张表查询。
我现在就是不知道怎么提取查询结果的字段。谢谢您的回答
$model = M('表名');
$where['tel'] = array('eq',"参数");
$where['btel'] = array('eq',"参数");
$where['_logic'] = 'OR';
$model -> where($where) -> oreder('id DESC') -> select();追问
= = ,我现在就是不知怎么获取 “参数”。
比如, 王五访问网页,然后获取到 王五的 ID是 3,然后根据王五的ID进行查询
输出结果:
id name tel btel
3 王五 1589456125 1589456125
现在我怎么使用王五的 tel 在对表进行查询,筛选出 btel=王五.tel的用户。
谢谢您的耐心解答
这样可以查询出 那些username 和出现的次数;
$Model = new Model() // 实例化一个model对象 没有对应任何数据表
$Model->query("这里是上面的sql语句");
以上是关于如何让thinkphp在获取数据库字段信息时区分数据库字段大小写的主要内容,如果未能解决你的问题,请参考以下文章