1、TP连接MSSQL
装的是ComsenzEXP_GBK.exe,可以到ComsenzEXP官网去下载。里面的php是5.2.17,比较稳定。可以在32位和64位的操作系统下连接MSSQL。(后来做Oracle项目的时候也用这个作为web服务器)
安装好之后,默认配置是开启mssql的,将附件 中 ntwdblib.dll 放到以下目录:
(1)Windows/System32/ 下
(2)安装的PHP目录下用 ComsenzEXP_GBK 即(\ComsenzEXP\PHP5)
(3)安装的apache目录下 ComsenzEXP_GBK 即(\ComsenzEXP\Apache\bin)
然后重启apache即可
配置文件跟连接mysql类似
附件:ntwdblib
2、发布文章,大量内容(字段类型为text)添加,点击提交,提示成功。但是显示的时候发现只有一部分。
原因:php.ini 针对mssql最大字符做了限制
修改:
打开php.ini,看到mssql.textsize,mssql.textlimit两个选项:
; Valid range 0 – 2147483647. Default = 4096.
;mssql.textlimit = 4096
; Valid range 0 – 2147483647. Default = 4096.
;mssql.textsize = 4096
可以看到默认配置为4096字节,也就是经常碰到的被截断为4K,将之改为合适的大小,去掉前面的分号,然后保存并重起WEB服务器。
我修改为65536即64K
1、插入数据库数据为乱码 ThinkPHP/Lib/Think/Db/Db.class.php下: 修改insert方法: public function insert($data,$options=array()) $values[] = $this->conv2gbk($value); //自定义转码操作for mssql //$values[] = $value; //原操作 /** * utf-8 to gb2312 编码转换 for mssql * 自定义方法 */ public function conv2utf8($string) { return iconv(“gb2312″,”utf-8″,$string); } public function conv2gbk($string) { return iconv(“utf-8″,”gb2312″,$string); } 2、查找数据为乱码 ThinkPHP/Lib/Think/Db/Db.class.php下: 添加如下方法: /** * gb2312 to utf-8 数组方式编码转换 for mssql * 自定义方法 */ public function conv2utf8Array($Row){ //$ResultSet = array(); $RowSet = array(); foreach($Row as $key=>$RowPerValue){ $RowSet[$key] = iconv(“gb2312″,”utf-8″,$RowPerValue); } return $RowSet; } ThinkPHP\Lib\Think\Db\Driver\DbMssql.class.php下: 修改getAll()方法 $result[] = $this->conv2utf8Array($row); //为mssql实现转码 //$result[] = $row; //原操作 3、findall()方法执行只查询出一条语句: MSSQL驱动的paresLimit函数的问题. public function parseLimit($limit) { if(empty($limit)) $limit=1; 改成if(empty($limit)) return ’1=1′; 4、save()修改数据不成功: a\Model.class.php: // 主键名称 protected $pk = ‘Id’; Id为数据表主键名称(严格区分大小写) b\Db.class.php: 将order、limit注释 * 更新记录 +———————————————————- * @access public +———————————————————- * @param mixed $data 数据 * @param array $options 表达式 +———————————————————- * @return false | integer +———————————————————- */ public function update($data,$options) { //.$this->parseOrder(isset($options['order'])?$options['order']:”) //.$this->parseLimit(isset($options['limit'])?$options['limit']:”) 5、save()修改数据后乱码解决问题: Db.class.php:添加函数 /** * utf-8 to gb2312 数组方式编码转换 for mssql * 自定义方法 */ public function conv2gbkArray($Row){ //$ResultSet = array(); $RowSet = array(); foreach($Row as $key=>$RowPerValue){ $RowSet[$key] = iconv(“utf-8″,”gb2312″,$RowPerValue); } return $RowSet; } Model.class.php:添加转码代码 public function save($data=”,$options=array()) { // 数据转码 $data = $this->db->conv2gbkArray($data); 6、删除不成功问题解决: Db.class.php: 注释limit、order /** +———————————————————- * 删除记录 +———————————————————- * @access public +———————————————————- * @param array $options 表达式 +———————————————————- * @return false | integer +———————————————————- */ public function delete($options=array()) // .$this->parseOrder(isset($options['order'])?$options['order']:”) // .$this->parseLimit(isset($options['limit'])?$options['limit']:”)
注意:
比如计算用户积分的时候,mysql的时候会写:
data[‘score’] = array(‘exp’,’score+1′);// 用户的积分加1
但是使用mssql的时候,最好写成并且字段默认值为0:
$data[‘login_count’] = $authInfo[‘login_count’]+1;
煎蛋什么时候混进电磁辐射有害论的低智能儿了?
煎蛋什么时候混进电磁辐射有害论的低智能儿了?