本文目錄一覽:
如何避免ThinkPHP的兩個坑
public function createProblems(){
$problems = I(‘json.’);
if (empty($problems)) {
$this-error($problems, ‘json格式不符合規範’);
}
foreach ($problems as $problem) {
$data = D(‘Problem’)-create($problem, self::OP_INSERT);
if (!$data) {
$this-error($problem, D(‘Problem’)-getError());
}
$temp[] = $data;
}
$ret = D(‘Problem’, ‘Service’)-addProblems($temp);
if ($ret === false) {
$this-error(null, ‘導入失敗’);
}
$this-success(null);
}
接口完成的功能是批量創建問題,參數為json數組,addProblem()方法中就是一個addAll操作。
第一個坑-自動填充
使用自動填充可能會覆蓋表單提交項目。其目的是為了防止表單非法提交字段。使用Model類的create方法創建數據對象的時候會自動進行表單數據處理。
官方文檔明確說了自動填充會覆蓋表單,所以即使你post過來的參數中給出了具體數值,使用create方法之後也可能會被覆蓋。千萬注意!!!
第二個坑-addAll方法
addAll方法中不能出現null值,否則其他數據會自動向前移動,導致添加失敗。舉例:
[
{
“appId”: 1,
“serviceId”: 2,
“createUser”:null,
“status”: 1,
“priority”: 2
}
]
其中,createUser字段為null,插入時的sql語句會變成insert into va_problem (appId, serviceId, createUser, status, priority)values (1, 2, 1, 2)。null值沒了,導致插入失敗,這應該是ThinkPHP3.2.3的一個bug。這篇博客有相關的討論。
引入坑的過程
problemModel裏面有對createUser做自動填充。
通過api創建問題時,首先自動填充會覆蓋,所以表單中的createUser值失效,這是第一個坑。然後,由於自動填充createUser調用的是get_username()函數,通過api調用時,session(username)取不到值,所以create之後字段變成”createUser”:null,引入了第二個坑。
THINKPHP項目的一些坑
當我們設置input type=”text/ display:block時,其寬度並不等於父元素的100%,而是需要我們手動設置width=100%;
{:C(“IP_URL”)}會調用Common下Conf里config.php的自定義變量
結論:IS_POST好用,IS_GET不好用,可以用count($_GET)來替代
PHP中不區分NUL null
兩個表連接 -join(“B on A.xx=B.xx”) √
三個表連接 -join(“inner join B on A.xx=B.xx join C on A.xx=C.xx”) √
-join(“inner join B on A.xx=B.xx inner join C on A.xx=C.xx”) √
mysql-php-視圖層
mysql中整形字段—》php接收為 字符串—》模板中又為number
ecshop 與php5.4兼容性上會出現什麼問題
是會有問題的,php5.4裏面會拋棄掉一些5.3的函數,所以ecshop的2.7.3版本在php5.4下面用的話會有一些不兼容,不過現在ecshop出3.0版本了,直接兼容到php5.6,模板堂官方對外免費使用的模板也都兼容5.6了,您可以去下載安裝用下
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/219914.html