ホームページ  >  記事  >  バックエンド開発  >  ThinkPhp 不正なデータ オブジェクト

ThinkPhp 不正なデータ オブジェクト

不言
不言オリジナル
2018-05-18 14:13:241490ブラウズ

 $data = $_POST;  
     $data['user_id']    = 1;  
     $data['create_at']  = date("Y-m-d H:i:s");  
     $data['update_at']  = date("Y-m-d H:i:s");  
     $data['is_enable']  = 1;  
     $data['is_visible'] = 1;  
     $categoryModel  = new \Admin\Model\CategoryModel();  
     $footPosition   = $categoryModel->getFootPosition();  
     $data['position']   = intval($footPosition) + 1;  
  
  
 // var_dump($data);  
  $categoryModel->add($data);

最初は位置の型が間違っているのかと思ったのですが、文字列に変換しても整数に変換しても不正なデータオブジェクトエラーが報告されました。 $data['position'] = intval($footPosition) + 1; これをコメントアウトすればデータの挿入には問題ありません。助けてください。

var_dump 後の結果は次のようになります。問題はありません。

array(7) { ["category_name"]=> string(12) "风言风语" ["user_id"]=> int(1) ["create_at"]=> string(19) "2015-04-
05 15:39:41" ["update_at"]=> string(19) "2015-04
-05 15:39:41" ["is_enable"]=> int(1) ["is_visible"]=> int(1) ["position"]=> int(2) }

データベースのフィールド位置にスペースが含まれていないことが確認されており、フィールド名は一貫しています。

ディスカッションに返信(解決策)

$footPosition = $categoryModel->getFootPosition();
$footPosition を出力して内容を確認してください

さらに、エラーが発生した場合には、元のエラー メッセージが表示される必要があります

問題は解決しました。 ThinkPhpModel の _facade 関数に入ると、

   foreach ($data as $key=>$val){  
              file_put_contents("xiaobin.txt", $key."\n", FILE_APPEND) ;  
              file_put_contents("xiaobin.txt", $fields, FILE_APPEND);  
                 if(!in_array($key,$fields,true)){  
                     if(APP_DEBUG){  
                         E(L('_DATA_TYPE_INVALID_').':['.$key.'=>'.$val.']');  
                     }                      
                     unset($data[$key]);  
                 }elseif(is_scalar($val)) {  
                     // 字段类型检查 和 强制转换  
                     $this->_parseType($data,$key);  
                 }  
             }

はフィールド配列の結果が次のとおりであることを発見しました: category_iduser_idcategory_nameblog_numcreate_atupdate_atis_enableis_visiblepre_positionnext_positioncategory_idArray これらはデータベースの列名であり、そのうち pre_position と next_position は後でテーブルの構築を開始したときのフィールドです。そして位置を追加しました。キャッシュが無効になっているため、キャッシュをクリアしても役に立ちません。
最後に、このデータは Runtime/Data/_fields に保存されていることがわかりました。削除するだけです。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。