0

PDO 実行ステートメントの場合、列名や配列文字列などの静的情報を、MySQL テーブルのすべての列を含む動的配列にしようとしています。

元のコードは次のとおりです。

$stmt = $conn->prepare("INSERT into data (`username,` `password`, `email`) VALUES username = :username , password = :password , email = :email ");

$stmt->execute(array(
    ':username' => $entry_username,
    ':password' => $entry_password,
    ':email' => $entry_email
));

これまでのところ、SQLステートメントを次のように変更できました

$sql = "INSERT into DATA (`"  . implode('`,`', $columns) . "`) values (:" . implode(',:', $columns) . ")";
$stmt = $conn->prepare($sql);

しかし、実行配列に同様のことを実行して、ステートメントのように動的に変化させることができませんでした。

配列に for ステートメントを追加しようとしました

for ($i = 0; $i < count($columns); $i++) {
    ':'.$columns[$i] => ${'entry_'.$columns[$i]};
}

しかし、これはうまくいきませんでした。

どんな助けでも大歓迎です。前もって感謝します!

4

3 に答える 3

0

これは、準備済みステートメントを有効に活用するのに最適な状況です。

これを試してみてください: ここでは、$columns 配列で変数が何と呼ばれるかを想定しています。

$stmt = $conn->prepare("INSERT into data 
      (username, password, email) VALUES( :username , :password, :email )");

$stmt->bindParam(':username', $username, PDO::PARAM_STR);
$stmt->bindParam(':password', $password, PDO::PARAM_STR);
$stmt->bindParam(':email', $email, PDO::PARAM_STR);

foreach ( $columns as $column ) {

    $username = $column['username'];
    $password = $column['password'];
    $email    = $column['email'];

    $result = $stmt->execute();

    if ( ! $result ) {
       // add some error checking code here
    }
}
于 2013-08-19T12:00:10.167 に答える
-1

for ループに固執する必要がない場合は、より簡単な foreach をお勧めします (for の小さな問題も知っています)。

foreach ($element in $array) { code execution here }

配列要素は $element (または好きな名前で) に保存され、そこにあるコマンドを実行できます。

これはあなたが探しているものですか、それとも私が間違っていましたか?

于 2013-08-19T11:56:57.387 に答える