之前,在PHP程序員雷雪松的博客中已經(jīng)詳細(xì)的介紹了Linux下MsSQL擴展的安裝。本以為這個解決了以后,使用國內(nèi)優(yōu)秀的PHP框架ThinkPHP就會應(yīng)該比較順利的。但是在連接MsSQL數(shù)據(jù)庫的時候還是遇到了一些問題,網(wǎng)上解決的方案并不多。下面PHP程序員雷雪松就把ThinkPHP項目中鏈接MsSQL數(shù)據(jù)庫報錯和解決辦法總結(jié)出來分享給需要的朋友。
1、報錯”Undefined class constant ‘PDO::SQLSRV_ATTR_ENCODING”
具體的解決辦法為:將ThinkPHP\Library\Think\Db\Driver\Sqlsrv.class.php中第26行’PDO::SQLSRV_ATTR_ENCODING => PDO::SQLSRV_ENCODING_UTF8,’注釋掉即可。
2、報錯”SQLSTATE[IMSSP]: An unsupported attribute was designated on the PDO object”
具體的解決辦法為:將ThinkPHP\Library\Think\Db\Driver.class.php中第101行’$this->options[PDO::ATTR_EMULATE_PREPARES] ?= ? false’注釋掉即可。
3、如果原表名大寫則會報錯找不到表名
具體的解決辦法為:不管MsSQL數(shù)據(jù)庫表名是否小寫,在ThinkPHP項目中所有表名小寫。
下面附上ThinkPHP3.2中操作MsSQL的配置文件conf.php:
return array(
//'配置項'=>'配置值'
'DB_TYPE'=>'sqlsrv',// 數(shù)據(jù)庫類型
'DB_USER'=>'',// 用戶名
'DB_PWD'=>'',// 密碼
'DB_PORT'=>'',// 端口
'DB_PREFIX'=>'',// 數(shù)據(jù)庫表前綴
'DB_DSN'=>'dblib:host=IP地址:端口;dbname=數(shù)據(jù)庫名稱',
'DB_CHARSET'=>'utf8',// 字符集
);
在這個項目中,因為第一次使用ThinkPHP框架操作MsSQL數(shù)據(jù)庫一路不太順利。但還是學(xué)到了很多知識,也總結(jié)了一些道理。第一,實踐出真知,只有你嘗試了才知道對不對,這個對于PHP程序員太重要了,不同的環(huán)境,不同的系統(tǒng)都有可能出錯。第二,面對新的問題,一定要有耐心,有信心,有決心。把原理的東西搞清楚,把問題化解為自己會的一些知識點。第三,一定要認(rèn)清自己,沒有誰什么都會。不管你做PHP程序員有多長時間,總會遇到問題。一定要多和別人交流,多去借助外面的力量,多去查閱網(wǎng)上資料。最后,感謝ThinkPHP開發(fā)者,感謝為開源事業(yè)做貢獻(xiàn)的前輩們!
標(biāo)簽:PHP與sqlserver、PHP編程