首頁| 新聞| 娛樂| 游戲| 科普| 文學| 編程| 系統| 數據庫| 建站| 學院| 產品| 網管| 維修| 辦公| 熱點
今天在講解Thinkphp框架的時候在使用ThinkPHP基礎模型類提供的addAll()方法進行多條數據寫入時報錯了,而且使用模型的getError()都獲取不到錯誤提示!沒錯,獲取不到錯誤!所以我認為這是ThinkPHP框架設計中存在的Bug。在學生都去吃飯時我自己翻看了框架底層對于addAll()的實現。我的課堂代碼是這樣寫的:if (M('SubOrder')->addAll($allGoods) === false) { $this->rollback(); throw new Exception('提交訂單失敗,請稍后再試!', 0);}因為為了獲取數據方便我的$allGoods是使用goods_id來索引的,錯誤就出在這兒但是讓我恨不能理解,讓我們一一道來。我的$allGoods的結構是這樣的array(2) { [5] => array(4) { ["goods_id"] => string(1) "5" ["PRice"] => string(6) "123.00" ["goods_num"] => string(1) "2" ["order_id"] => string(2) "16" } [15] => array(4) { ["goods_id"] => string(2) "15" ["price"] => string(4) "0.10" ["goods_num"] => string(1) "2" ["order_id"] => string(2) "16" }}查看其它都沒有問題的情況下唯一可能出錯的就是數據的索引方式了,難道TP只能使用從0開始索引的二維數組?這讓我很不能理解,作為一個框架應該考慮到通用性,所以翻看了TP中MySQL驅動里關于insertAll()的實現,因為model中的addAll()就是調用驅動里的insertAll()實現的:$result = $this->db->insertAll($dataList,$options,$replace);所以就是這樣了!public function insertAll($dataSet,$options=array(),$replace=false) { $values = array(); $this->model = $options['model']; if(!is_array($dataSet[0])) return false; //問題就出在這兒問題就出在對于$dataSet[0]的判斷中!頓時心中千軍萬馬奔騰而過,作為框架如果非要這樣操作為什么不先對$dataSet重寫索引后來處理呢?好吧,我要改,我要改框架!-_-框架修改方式。打開Library/Think/Db/Driver/Mysql.class.php找到insertAll方法修改如下public function insertAll($dataSet,$options=array(),$replace=false) { $values = array(); $this->model = $options['model']; $firstRow = array_shift($dataSet); //取出傳入數組的第一條數據 if(!is_array($firstRow)) return false; //根據框架的思想進行簡單的數組判斷 $dataSet[] = $firstRow; //重新賦值到待寫入數組的元素中至此,問題解決。最后,ThinkPHP官方已經致力于開發ThinkPHP5了,ThinkPHP3.2.3的維護生命周期已經結束了,所以還在使用ThinkPHP3.2.3作為開發框架的公司只能靠自己了。
我的課堂代碼是這樣寫的:
if (M('SubOrder')->addAll($allGoods) === false) { $this->rollback(); throw new Exception('提交訂單失敗,請稍后再試!', 0);}因為為了獲取數據方便我的$allGoods是使用goods_id來索引的,錯誤就出在這兒但是讓我恨不能理解,讓我們一一道來。我的$allGoods的結構是這樣的array(2) { [5] => array(4) { ["goods_id"] => string(1) "5" ["PRice"] => string(6) "123.00" ["goods_num"] => string(1) "2" ["order_id"] => string(2) "16" } [15] => array(4) { ["goods_id"] => string(2) "15" ["price"] => string(4) "0.10" ["goods_num"] => string(1) "2" ["order_id"] => string(2) "16" }}查看其它都沒有問題的情況下唯一可能出錯的就是數據的索引方式了,難道TP只能使用從0開始索引的二維數組?這讓我很不能理解,作為一個框架應該考慮到通用性,所以翻看了TP中MySQL驅動里關于insertAll()的實現,因為model中的addAll()就是調用驅動里的insertAll()實現的:$result = $this->db->insertAll($dataList,$options,$replace);所以就是這樣了!public function insertAll($dataSet,$options=array(),$replace=false) { $values = array(); $this->model = $options['model']; if(!is_array($dataSet[0])) return false; //問題就出在這兒問題就出在對于$dataSet[0]的判斷中!頓時心中千軍萬馬奔騰而過,作為框架如果非要這樣操作為什么不先對$dataSet重寫索引后來處理呢?好吧,我要改,我要改框架!-_-框架修改方式。打開Library/Think/Db/Driver/Mysql.class.php找到insertAll方法修改如下public function insertAll($dataSet,$options=array(),$replace=false) { $values = array(); $this->model = $options['model']; $firstRow = array_shift($dataSet); //取出傳入數組的第一條數據 if(!is_array($firstRow)) return false; //根據框架的思想進行簡單的數組判斷 $dataSet[] = $firstRow; //重新賦值到待寫入數組的元素中至此,問題解決。最后,ThinkPHP官方已經致力于開發ThinkPHP5了,ThinkPHP3.2.3的維護生命周期已經結束了,所以還在使用ThinkPHP3.2.3作為開發框架的公司只能靠自己了。
if (M('SubOrder')->addAll($allGoods) === false) {
$this->rollback();
throw new Exception('提交訂單失敗,請稍后再試!', 0);
}因為為了獲取數據方便我的$allGoods是使用goods_id來索引的,錯誤就出在這兒但是讓我恨不能理解,讓我們一一道來。我的$allGoods的結構是這樣的array(2) { [5] => array(4) { ["goods_id"] => string(1) "5" ["PRice"] => string(6) "123.00" ["goods_num"] => string(1) "2" ["order_id"] => string(2) "16" } [15] => array(4) { ["goods_id"] => string(2) "15" ["price"] => string(4) "0.10" ["goods_num"] => string(1) "2" ["order_id"] => string(2) "16" }}查看其它都沒有問題的情況下唯一可能出錯的就是數據的索引方式了,難道TP只能使用從0開始索引的二維數組?這讓我很不能理解,作為一個框架應該考慮到通用性,所以翻看了TP中MySQL驅動里關于insertAll()的實現,因為model中的addAll()就是調用驅動里的insertAll()實現的:$result = $this->db->insertAll($dataList,$options,$replace);所以就是這樣了!public function insertAll($dataSet,$options=array(),$replace=false) { $values = array(); $this->model = $options['model']; if(!is_array($dataSet[0])) return false; //問題就出在這兒問題就出在對于$dataSet[0]的判斷中!頓時心中千軍萬馬奔騰而過,作為框架如果非要這樣操作為什么不先對$dataSet重寫索引后來處理呢?好吧,我要改,我要改框架!-_-框架修改方式。打開Library/Think/Db/Driver/Mysql.class.php找到insertAll方法修改如下public function insertAll($dataSet,$options=array(),$replace=false) { $values = array(); $this->model = $options['model']; $firstRow = array_shift($dataSet); //取出傳入數組的第一條數據 if(!is_array($firstRow)) return false; //根據框架的思想進行簡單的數組判斷 $dataSet[] = $firstRow; //重新賦值到待寫入數組的元素中至此,問題解決。最后,ThinkPHP官方已經致力于開發ThinkPHP5了,ThinkPHP3.2.3的維護生命周期已經結束了,所以還在使用ThinkPHP3.2.3作為開發框架的公司只能靠自己了。
因為為了獲取數據方便我的$allGoods是使用goods_id來索引的,錯誤就出在這兒但是讓我恨不能理解,讓我們一一道來。
我的$allGoods的結構是這樣的
array(2) { [5] => array(4) { ["goods_id"] => string(1) "5" ["PRice"] => string(6) "123.00" ["goods_num"] => string(1) "2" ["order_id"] => string(2) "16" } [15] => array(4) { ["goods_id"] => string(2) "15" ["price"] => string(4) "0.10" ["goods_num"] => string(1) "2" ["order_id"] => string(2) "16" }}查看其它都沒有問題的情況下唯一可能出錯的就是數據的索引方式了,難道TP只能使用從0開始索引的二維數組?這讓我很不能理解,作為一個框架應該考慮到通用性,所以翻看了TP中MySQL驅動里關于insertAll()的實現,因為model中的addAll()就是調用驅動里的insertAll()實現的:$result = $this->db->insertAll($dataList,$options,$replace);所以就是這樣了!public function insertAll($dataSet,$options=array(),$replace=false) { $values = array(); $this->model = $options['model']; if(!is_array($dataSet[0])) return false; //問題就出在這兒問題就出在對于$dataSet[0]的判斷中!頓時心中千軍萬馬奔騰而過,作為框架如果非要這樣操作為什么不先對$dataSet重寫索引后來處理呢?好吧,我要改,我要改框架!-_-框架修改方式。打開Library/Think/Db/Driver/Mysql.class.php找到insertAll方法修改如下public function insertAll($dataSet,$options=array(),$replace=false) { $values = array(); $this->model = $options['model']; $firstRow = array_shift($dataSet); //取出傳入數組的第一條數據 if(!is_array($firstRow)) return false; //根據框架的思想進行簡單的數組判斷 $dataSet[] = $firstRow; //重新賦值到待寫入數組的元素中至此,問題解決。最后,ThinkPHP官方已經致力于開發ThinkPHP5了,ThinkPHP3.2.3的維護生命周期已經結束了,所以還在使用ThinkPHP3.2.3作為開發框架的公司只能靠自己了。
查看其它都沒有問題的情況下唯一可能出錯的就是數據的索引方式了,難道TP只能使用從0開始索引的二維數組?這讓我很不能理解,作為一個框架應該考慮到通用性,所以翻看了TP中MySQL驅動里關于insertAll()的實現,因為model中的addAll()就是調用驅動里的insertAll()實現的:
$result = $this->db->insertAll($dataList,$options,$replace);所以就是這樣了!public function insertAll($dataSet,$options=array(),$replace=false) { $values = array(); $this->model = $options['model']; if(!is_array($dataSet[0])) return false; //問題就出在這兒問題就出在對于$dataSet[0]的判斷中!頓時心中千軍萬馬奔騰而過,作為框架如果非要這樣操作為什么不先對$dataSet重寫索引后來處理呢?好吧,我要改,我要改框架!-_-框架修改方式。打開Library/Think/Db/Driver/Mysql.class.php找到insertAll方法修改如下public function insertAll($dataSet,$options=array(),$replace=false) { $values = array(); $this->model = $options['model']; $firstRow = array_shift($dataSet); //取出傳入數組的第一條數據 if(!is_array($firstRow)) return false; //根據框架的思想進行簡單的數組判斷 $dataSet[] = $firstRow; //重新賦值到待寫入數組的元素中至此,問題解決。最后,ThinkPHP官方已經致力于開發ThinkPHP5了,ThinkPHP3.2.3的維護生命周期已經結束了,所以還在使用ThinkPHP3.2.3作為開發框架的公司只能靠自己了。
所以就是這樣了!
public function insertAll($dataSet,$options=array(),$replace=false) { $values = array(); $this->model = $options['model']; if(!is_array($dataSet[0])) return false; //問題就出在這兒問題就出在對于$dataSet[0]的判斷中!頓時心中千軍萬馬奔騰而過,作為框架如果非要這樣操作為什么不先對$dataSet重寫索引后來處理呢?好吧,我要改,我要改框架!-_-框架修改方式。打開Library/Think/Db/Driver/Mysql.class.php找到insertAll方法修改如下public function insertAll($dataSet,$options=array(),$replace=false) { $values = array(); $this->model = $options['model']; $firstRow = array_shift($dataSet); //取出傳入數組的第一條數據 if(!is_array($firstRow)) return false; //根據框架的思想進行簡單的數組判斷 $dataSet[] = $firstRow; //重新賦值到待寫入數組的元素中至此,問題解決。最后,ThinkPHP官方已經致力于開發ThinkPHP5了,ThinkPHP3.2.3的維護生命周期已經結束了,所以還在使用ThinkPHP3.2.3作為開發框架的公司只能靠自己了。
public function insertAll($dataSet,$options=array(),$replace=false) {
$values = array();
$this->model = $options['model'];
if(!is_array($dataSet[0])) return false; //問題就出在這兒問題就出在對于$dataSet[0]的判斷中!頓時心中千軍萬馬奔騰而過,作為框架如果非要這樣操作為什么不先對$dataSet重寫索引后來處理呢?好吧,我要改,我要改框架!-_-框架修改方式。打開Library/Think/Db/Driver/Mysql.class.php找到insertAll方法修改如下public function insertAll($dataSet,$options=array(),$replace=false) { $values = array(); $this->model = $options['model']; $firstRow = array_shift($dataSet); //取出傳入數組的第一條數據 if(!is_array($firstRow)) return false; //根據框架的思想進行簡單的數組判斷 $dataSet[] = $firstRow; //重新賦值到待寫入數組的元素中至此,問題解決。最后,ThinkPHP官方已經致力于開發ThinkPHP5了,ThinkPHP3.2.3的維護生命周期已經結束了,所以還在使用ThinkPHP3.2.3作為開發框架的公司只能靠自己了。
問題就出在對于$dataSet[0]的判斷中!頓時心中千軍萬馬奔騰而過,作為框架如果非要這樣操作為什么不先對$dataSet重寫索引后來處理呢?好吧,我要改,我要改框架!-_-
框架修改方式。打開Library/Think/Db/Driver/Mysql.class.php找到insertAll方法修改如下
public function insertAll($dataSet,$options=array(),$replace=false) { $values = array(); $this->model = $options['model']; $firstRow = array_shift($dataSet); //取出傳入數組的第一條數據 if(!is_array($firstRow)) return false; //根據框架的思想進行簡單的數組判斷 $dataSet[] = $firstRow; //重新賦值到待寫入數組的元素中至此,問題解決。最后,ThinkPHP官方已經致力于開發ThinkPHP5了,ThinkPHP3.2.3的維護生命周期已經結束了,所以還在使用ThinkPHP3.2.3作為開發框架的公司只能靠自己了。
$firstRow = array_shift($dataSet); //取出傳入數組的第一條數據
if(!is_array($firstRow)) return false; //根據框架的思想進行簡單的數組判斷
$dataSet[] = $firstRow; //重新賦值到待寫入數組的元素中至此,問題解決。最后,ThinkPHP官方已經致力于開發ThinkPHP5了,ThinkPHP3.2.3的維護生命周期已經結束了,所以還在使用ThinkPHP3.2.3作為開發框架的公司只能靠自己了。
至此,問題解決。最后,ThinkPHP官方已經致力于開發ThinkPHP5了,ThinkPHP3.2.3的維護生命周期已經結束了,所以還在使用ThinkPHP3.2.3作為開發框架的公司只能靠自己了。
索泰發布一款GTX 1070 Mini迷
AMD新旗艦顯卡輕松干翻NVIDIA
索泰發布一款GTX 1070 Mini迷你版本:小機
芭蕾舞蹈表演,真實美到極致
下午茶時間,悠然自得的休憩
充斥這繁華奢靡氣息的城市迪拜風景圖片
從山間到田野再到大海美麗的自然風景圖片
肉食主義者的最愛美食烤肉圖片
夏日甜心草莓美食圖片
人逢知己千杯少,喝酒搞笑圖集
搞笑試卷,學生惡搞答題
新聞熱點
疑難解答
圖片精選
網站加速 PHP 緩沖的免費實現方法
網友關注