2

だから私はこの問題にかなり混乱しています。PHPを使用してこのファイルに投稿を送信してAJAXいます。配列を取り、逆にし、チャンクし、値をバインドするために使用します。各チャンクには、更新する行に相当する情報が保持されるため、for ループの反復ごとに行が更新されます。

初めてこれを試みたとき、次のコードを使用しました。

if(isset($_POST['saveEdits'])) {
    $i = 0;
    $j = 1; 
    $update = array();          
    $update = $_POST['saveEdits'];
    $chunk_count = count($update)/7;    
    $backwards = array_reverse($update);
    $chunks = array_chunk($backwards, 7);               

    try {
        for($i; $i < $chunk_count; $i++ ) {
            $update_project = $db->prepare('
                UPDATE projects
                SET comments = ?,
                    contact = ?,
                    est_end = ?,
                    est_start = ?,  
                    apm = ?,  
                    pm = ?                              
                WHERE id = ?
            ');

            foreach ($chunks[$i] as $field => $val) {                           
                $update_project->bindValue($j++, $val, PDO::PARAM_STR);                                 
            }           
            $update_project->execute();

        }

        echo 'Projects Updated';        

    } catch(PDOException $e) {
        die($e->getMessage());
    }   
} else {    
    echo 'could not update projects table';
}

毎回次のエラーが表示されます

Warning: PDOStatement::execute(): SQLSTATE[HY093]: Invalid parameter number: parameter was not defined in C:\xampp\htdocs\core\functions\update_projects.php on line 31

だから変えるように言われた

$i = 0;

$i = 1;

これは何とか機能します。これにより、データを 1 回挿入できますが、すべてのデータを挿入することはできません。これがまったく機能するという事実は、私には困惑しています。$i は、ループ インデックスとチャンク インデックスのホルダーです。0 から開始する必要があります。1から始めることがどのように役立つかわかりません。$j はパラメーター バインダーのホルダーで、1 から開始する必要があります。

いくつかの追加情報。var_dump(chunks[0]) と var_dump(chunks[1]) の場合、次のように表示されます

array(7) { [0]=> string(13) "more comments" [1]=> string(9) "jimmy doe" [2]=> string(6) "1-1-14" [3]=> string(7) "12-1-13" [4]=> string(9) "janey doe" [5]=> string(9) "jonny doe" [6]=> string(2) "17" } 
array(7) { [0]=> string(13) "some comments" [1]=> string(7) "jim doe" [2]=> string(6) "1-1-14" [3]=> string(7) "12-1-13" [4]=> string(8) "jane doe" [5]=> string(7) "jon doe" [6]=> string(2) "16" }

というわけでレビュー。$i = 0一番上にエラーが表示され、$i = 11行挿入して終了です。誰かがここで何が起こっているのか教えてもらえますか? どんな助けでも大歓迎です

4

2 に答える 2