sql >> データベース >  >> RDS >> Mysql

PDOプリペアドステートメントのパラメータ番号が無効です

    くそー、私は数時間後に問題を見つけました...

    // $connection is the PDO object;
    // $full_data contains:
    // $full_data[$i]["address"]
    // $full_data[$i]["phone"]
    // $full_data[$i]["email"]
    // $full_data[$i]["user_id"]
    // ==> $full_data[$i]["surname"] // not used but present
    // ==> $full_data[$i]["name"] // not used but present
    

    クエリ["surname"]に保存されていない配列データ および["name"] エラーを生成します。execute ();のようです。 正確な配列データ構造が必要です。これを使用して問題を解決しました:

    $sql = "UPDATE users_table SET city = :address, phone = :phone, email = :email, admin_id = :admin_id, admin_name = :admin_name WHERE user_id = :user_id";
    $statement = $connection->prepare ($sql);
    
    // must be removed ==> $statement->bindParam (':admin_id', trim($admin_id), PDO::PARAM_INT);
    // must be removed ==> $statement->bindParam (':admin_name', trim($admin_name), PDO::PARAM_STR);
    
    for ($i = 0; $i < count($full_data); $i++) {
        $full_data[$i]["admin_name"] = "the admin name";
        $full_data[$i]["admin_id"] = "100";
        unset ($full_data[$i]["surname"]); // IMPORTANT: must remove the unused vars
        unset ($full_data[$i]["name"]); // IMPORTANT: must remove the unused vars
    }
    
    
    
    foreach ($full_data as $value) {
        // bindParam can be avoided, but it's recommended for data type security
        $statement->bindParam(':address', trim($value['address']), PDO::PARAM_STR);
        $statement->bindParam(':phone', trim($value['phone']), PDO::PARAM_STR);
        $statement->bindParam(':email', trim($value['email']), PDO::PARAM_STR);
        $statement->bindParam(':admin_id', trim($value['admin_id']), PDO::PARAM_INT);
        $statement->bindParam(':admin_name', trim($value['admin_name']), PDO::PARAM_STR);
    
        $ok = $statement->execute ($value);
        $num = $statement->rowCount ();
    }
    
    } catch (PDOException $e) {
        return $e->getMessage ();
    }
    


    1. SQLAlchemy-カウントステータスはtrueです

    2. 2 つのデータベース列を 1 つの結果セット列に連結する

    3. Codeigniterのアクティブレコードクエリは、データベースからデータをロードするのに時間がかかりすぎます

    4. nvarcharをintに変換する動的SQLエラー