2016-11-28 11 views
0

私はHTMLフォームを "post"メソッドで提出しています。その後、foreachを使用して$ _POST名と一致するカラム名があるかどうかを確認します。もしそうでなければ、私はその列を作成します。次に、それぞれの適切な列に$ _POSTデータを格納します。foreachヒットリミットのPHPを使用したmySQLカラムの作成

フォーム全体(約500種類の異なるエントリ)を送信しようとするまで、すべてがうまくいくように見えました。 php関数は作成された列で停止します。それらのうち、最後の6列は、(提出された$ _POST情報の代わりに) "ヌル"の結果を返し、その前の20列は2つの正しい$ _POSTデータのみを持ちます。

print_r($ _ POST)で確認すると、すべてのデータが送信されたことが確認できます。私はphp_iniのメモリの制限やmax_execution_timeの変更を試みましたが、成功しませんでした。

これは私のforeach PHPのコードです:私は、残りの50列を作成し、完全に、現在作成された最後の30かそこらを更新することはできませんなぜ

foreach ($_POST as $key => $value){ 
     //$allKeys = array_keys($_POST); 
     //$keyName=$allKeys[$i]; 
     $key=mysqli_real_escape_string($link, $key); 
     $value= mysqli_real_escape_string($link, stripslashes($value)); 

     $result = mysql_query("SHOW COLUMNS FROM $table LIKE '".mysqli_real_escape_string($link, $key)."'"); 
     $exists = (mysqli_num_rows($result))?TRUE:FALSE; 
     if(!($exists)) { 
      $add=mysqli_query($link,"ALTER TABLE $table ADD (".$key." VARCHAR(65500))");   
     }  

     $query="INSERT INTO $table 
     ($crmNumberKey,$key) 
     VALUES 
     ('$crmNumberValue','$value') 
     ON DUPLICATE KEY UPDATE 
     $key='$value'"; 

     mysqli_query($link, $query); 


     unset($_SESSION['profileInProgressCrmNumber']); 
     unset($_SESSION['profileInProgressAccountName']); 
     unset($_SESSION['profileInProgressAccountCity']); 
     unset($_SESSION['profileInProgressAccountRep']);           
    } 

誰かが説明できますか?

おかげで、あなたは最大列制限(4096)、あなたがテーブルの最大行サイズヒットしているヒットしていないものの

+2

。これは、一般的に再考や再設計が必要なモデルの兆候です。 – arkascha

+0

...それはMagento ... – CD001

+0

**警告**: 'mysqli'と廃止予定の' mysql_query'関数を混用しないでください。これは重要なことです。あなたのコードは、間違ったバックエンドドライバを使用しているため、動作しない可能性があります。オブジェクト指向モードでmysqliを使うと、このような単純な間違いを避けることができます。 – tadman

答えて

関連する問題