解决办法:
就是修改thinkphp的源码中的Library/Db/Driverclassphp文件,把
PDO::ATTR_CASE => PDO::CASE_LOWER 改为 PDO::ATTR_CASE => PDO::CASE_NATURAL,
或者在配置文件里面增加
DB_PARAMS’ => array(\PDO::ATTR_CASE => \PDO::CASE_NATURAL) 这一句。
第一次使用的时候这种解决方法果然可以,但是做另外一个项目的时候却始终不生效,无奈,百度了半天,找到一个方法,因为thinkphp执行的时候默认会把大写转换成小写,所以我们找到它的源码不让它转换就行。
修改Common/functionsphp里面的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/Modelclassphp里面的getTableName函数:
//$this->trueTableName = strtolower($tableName); //这里会将表名转换成小写,修改成不转换
$this->trueTableName = $tableName;
修改其中一句,这样就可以解决数据库字段名大写的问题。
M('table')->count();
见手册统计查询:
方法说明
Count 统计数量,参数是要统计的字段名(可选)
Max 获取最大值,参数是要统计的字段名(必须)
Min 获取最小值,参数是要统计的字段名(必须)
Avg 获取平均值,参数是要统计的字段名(必须)
Sum 获取总分,参数是要统计的字段名(必须)
一般将前台页面搜索结果中,不喜欢的内容(链接),删除掉,因为整个网站的编程框架式thinkphp,运用js中的ajax对页面进行响应,调用后台php接口,实现前台和后台数据库的同时更新
首先我们需要做的就是在前台页面中添加一个文本“删除”,可以这么添加:
代码如下:
<a href="javascript:void(0);" id= "<php>echo $val[id]</php>" class="delete" >删除</a>
上面的html代码的意思:就是给删除添加一个href,这个href是个js函数,类似于超链接的作用,当然对于我这样的新手在刚开始的时候会有疑惑,我们平时的超链接不是这样的,网页中很多的javascript:void(0),那程序怎么知道用户点击删除后,会响应其真正对应的js函数呢?别急,这就是为什么会为删除添加id以及class这样的标签,相信我把js中的代码公布出来以后你就会明白了,代码如下:
jQuery("list adelete")click(function(){
if(confirm("你确定要删除吗?")){
var _this=this;
var id = jQuery(_this)attr("id");
jQueryajax({
url : '/Search/indexphp/Jason/delete',
data : {'id':id},
dataType : 'json',
success : function(data){
var del = datadel;
if(del == 1){//删除成功
jQuery("#"+id)parents("list")remove();
}else{//删除失败
alert("删除失败");
}
}
});
}
});
大家看函数的头部:jQuery("list adelete")click(),jQuery后面的标签是很重要的,这就保证了jquery很准确的响应页面中用户点击的“位置”,添加的事件为click(),在click里添加响应事件的代码:var id = jQuery(_this)attr("id");获取a对应的id,因为这个id是我们删除数据库时用到的链接id,当然这种直接明文的方式不好,在这里只是介绍整个响应过程。调用ajax,实现异步的运行整个过程。我们设置了js接受的是json串,这里的方式应该有很多种吧,我没有去尝试,大家要是有兴趣可以自行尝试一下。/Search/indexphp/Jason/delete这句话就是js去请求php的接口,php接口对用的代码如下:
注意ajax在求php接口时的路径,也就是delete函数必须放在JasonActionclassphp中,此例子是必须这样的:
代码如下:
public function delete(){
if($this->isGet()){
$userId = session("uid");//用户登录
if(!empty($userId)){
$a = M('');
$id = $this->_get('id');
$result=$a->where("id=$id")->delete();//删除
if($result > 0){
$arr = array("del"=>'1');
}else{
$arr = array("del"=>'0');
}
$json_str = json_encode($arr);
echo $json_str;//返回给js
}
}
}
相信大家对上面的代码不会陌生吧,整个过程都是thinkphp框架内部配置完毕的
var del = datadel;这句是接受php代码返回来的json串中del这个key的value,进而在前台进行页面更新和响应
复制代码代码如下:
if(del == 1){//删除成功
jQuery("#"+id)parents("list")remove();//这句话就是后台删除成功后,直接在前台对响应的div进行删除,这样性能就会很快,无需进行后台数据的重新提取至前台页面中,
}else{//删除失败
alert("删除失败");
}
整个响应的过程就是这样,至于效果优化,是优化和细化方面的问题,后来,身边的同事又告诉我前台移除响应链接的另一个动态效果:
即将:
代码如下:
jQuery("#"+id)parents("list")remove();
替换为:
代码如下:
jQuery("#"+id)parents("list")slideUp("slow", function(){
jQuery(this)remove();
});
前边介绍了负载均衡,mysql同步,接下来介绍tp6分布式部署多个数据库,实现读写分离。
tp6的分布式部署读和写仍然是一个系统,这里我们分开 *** 作,给用户展示的就是从数据库,后端添加文章就是主库,然后同步到从库。
1、配置数据库链接参数
目标:实现随机使用数据库展示信息,只是读 *** 作。
测试:前台可以读取表中内容(存放的不一致),查看是否是随机显示的。
打开env文件进行编辑
说明:
2、编辑databasephp
找到deploy设置为1分布式部署,下边不要改,都是读,写入的也就是后端的我们单独建站连接主库。
配置完成,tp6使用的是mt_rand取随机数判断使用哪个数据库。
3、数据库交互写 *** 作
比如浏览量没必要每次都去更新数据库,可以先使用redis缓存,存够1000的整数倍,再去更新数据库。
4、后台独立,也就是写
可以前后端分离,单独做一个网站(没有前端)使用ip访问或者独立的域名连接后台。
5、上传附件(jquery ajax跨域上传)
使用了nginx负载均衡,肯定是多个一样的网站,如果存放到一个站,别的就不能访问了,可以单独设置一个附件(压缩包,等)服务器,可以使用二级域名连接,这就要求我们上传附件的时候,是上传到附件服务器。
jqueryURL
API控制器apdpic方法
说明:
也可以先传到后台服务器然后使用(php)ftp上传,或者是通过curl上传到附件服务器,感觉那样毕竟麻烦,直接设置跨域会比较简单。
也测试了使用jsonp跨域,但是不能上传附件。
6、thinkphp6实现读写分离(在一个站点)
我个人是不喜欢这样的,负载均衡应该是均衡地读,也就是前台单独一个站点,后端的写是另一个独立的站点,看个人喜好吧。
独立后台的优点:可以提升安全性,因为我们的后台网址是不公开的,避免用户猜测一些后台的信息。
env配置按照1所述编辑,默认第一个是主库。
databasephp
愿大家在新的一年心想事成,万事如意!!!
M('country')
->join('info on infocountry_id=countrycountry_id')
->where('countrycountry_id=1 or countrycountry_id=1 or 自己写')
->select();
简单写这样就可以了,where里的添加自己写吧 把已知的country_id写在里面就好了
后台添加新闻页面,设计跳转地址,数据库中加一个跳转地址的字段TitleURL,前台作一个对这个字段的判断,字段为空,则显示页面,不为空,则跳转到指定页面。
if <%=rs("TitleURL")%> = "" then
<a href="NewsViewaspID="><%=rs("Title")%></a>
else
<a href="<%=rs("TitleURL")%>"><%=rs("Title")%></a>
end if
以上就是关于如何让thinkphp在获取数据库字段信息时区分数据库字段大小写全部的内容,包括:如何让thinkphp在获取数据库字段信息时区分数据库字段大小写、thinkphp如何查询数据库某一表中有多少条数据、thinkphp怎样获取ajax请求数据等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)