1. 程式人生 > >TP升級到3.2.3的注意事項

TP升級到3.2.3的注意事項

從TP3.2.2升級到3.2.3有以下幾點需要注意
1 TP3.2.3的DB FIELD預設小寫,如果DB有大小寫混合的設計,需要在config.php新增以下設定
'DB_PARAMS'    =>    array(\PDO::ATTR_CASE => \PDO::CASE_NATURAL),

2 'URL_CASE_INSENSITIVE' =>true時,APP_DEBUG=true,若Action名或模板名帶有大小寫,會出現找不到模板的異常,因此'URL_CASE_INSENSITIVE' 一律設定為false(預設值)

3 APP_DEBUG設定在index.php,config.php不需要再設定

4 3.2.2的ThinkPHP\Library\Think\Log\Driver\File.class.php 有bug。若在Runtime下沒有對應module的目錄,則\Think\Log::write()無法建立目錄並生成log檔案。3.2.3 fixed這個問題了。

5 第三方類庫建議存放位置\ThinkPHP\Library\Vendor

6 join的預設型別由left join 改成了inner join

...

7 3.2對sql語句檢查更加嚴格。若DB Field設定為not null,而sql將該值設定為null,則sql會丟擲異常。若某個not null欄位為null,而其它欄位正常的情況下,TP3.2會將not null的欄位對應的語句過濾掉
demo 1:

public function testUpdate()
	{
		$data['HKID'] = null;
		$searchData['user_id'] = 3;
		$result = D("OauthUser")->where($searchData)->save($data);
		echo $result!==false ? "success" : "failed";
		echo " " . D("OauthUser")->getLastSql();
	}

HKID欄位在DB是not null,若設定為null,會丟擲以下異常
SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE `user_id` = 3' at line 1
改成$data['HKID'] = ""; 執行成功

demo 2:
public function testMultiUpdate()
	{
		$data['HKID'] = null;
 $data['districtID'] = 1;
		$searchData['user_id'] = 3;
		$result = D("OauthUser")->where($searchData)->save($data);
		echo $result!==false ? "success" : "failed";
		echo " " . D("OauthUser")->getLastSql();
	}


以上更新不會丟擲異常。生成的sql會過濾掉不符合DB的HKID欄位。生成的SQL:
UPDATE `oauth_users` SET `districtID`='1' WHERE `user_id` = 3