thinkphp問題諮詢
欄位過濾
如果寫入了資料表中不存在的欄位數據,則會被直接過濾,例如:
$data['name'] = 'thinkphp';
$data['email'] = 'thinkphp@ gmail.com';
$data['test'] = 'test';
$User = M('User');
$User->data($data)->add();
複製程式碼
其中test欄位是不存在的,所以寫入資料的時候會自動過濾掉。
在3.2.2版本以上,如果開啟偵錯模式的話,則會拋出異常,提示:非法資料物件:[test=>test]
上面是手冊裡面的話,開啟了debug,可是就是沒報錯。之前別的項目會報的。自己重新載了官網最新的源碼,就是不報錯。特別是update的時候,條件欄位寫錯了,自己過濾了,把所有資料都update了,很蛋痛
回覆內容:
欄位過濾
如果寫入了資料表中不存在的欄位數據,則會被直接過濾,例如:
$data['name'] = 'thinkphp';
$data['email'] = 'thinkphp@ gmail.com';
$data['test'] = 'test';
$User = M('User');
$User->data($data)->add();
複製程式碼
其中test欄位是不存在的,所以寫入資料的時候會自動過濾掉。
在3.2.2版本以上,如果開啟偵錯模式的話,則會拋出異常,提示:非法資料物件:[test=>test]
上面是手冊裡面的話,開啟了debug,可是就是沒報錯。之前別的項目會報的。自己重新載了官網最新的源碼,就是不報錯。特別是update的時候,條件欄位寫錯了,自己過濾了,把所有資料都update了,很蛋痛
翻了下TP3.2.3的源碼,只有在$this->options['strict']不為空的時候才會報錯,至於在哪裡操作這個options['strict'],沒找到。
感覺是bug吧。
你可以去試著找下。
thinkphp_3.2.3_full/ThinkPHP/Library/Think/Model.class.php
第267-277行:
<code>foreach ($data as $key=>$val){ if(!in_array($key,$fields,true)){ // 如果字段不存在 if(!empty($this->options['strict'])){ // 只有在这个$this->options['strict']不为空的时候才抛异常。 E(L('_DATA_TYPE_INVALID_').':['.$key.'=>'.$val.']'); } // unset掉这个没用的字段 unset($data[$key]); }elseif(is_scalar($val)) { $this->_parseType($data,$key); } }</code>
條件的話,你可以另外再加一個where()的連貫操作
ThinkPHPLibraryThinkModel.class.php裡面有兩處跑錯誤的,一處是條件錯誤,一個是插入操作字段錯誤!
具體什麼錯誤無解,對比了3.2.2,改成一樣的條件,問題不大。

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

適用於 Ubuntu 和 Debian 的 PHP 8.4 安裝和升級指南

如何設定 Visual Studio Code (VS Code) 進行 PHP 開發
