php
1 2 //$dataは、keyがcolumn名、valueが値 3 4 $pdo = db_connect(); 5 try{ 6 $pdo->beginTransaction(); 7 $sql = "UPDATE `testdb` SET "; 8 foreach ( array_keys($data) as $key ) { 9 $sql .= " `{$key}` = :{$key} "; 10 $sql .= ","; 11 } 12 $sql = substr($sql, 0, -1);//最後のコンマを取り除く 13 $sql .= " WHERE `id` = :id "; 14 $stmh = $pdo ->prepare($sql); 15 foreach ($data as $key1 => $value) { 16 $stmh ->bindParam(":{$key1}", $value, PDO::PARAM_STR); 17 } 18 $stmh ->bindParam(':id', $id, PDO::PARAM_STR); 19 $stmh ->execute(); 20 $pdo ->commit(); //データ確定 21 $count = $stmh ->rowCount(); 22 } catch (Exception $ex) { 23 $pdo ->rollBack(); 24 die('update_member_database:'.$ex ->getMessage()); 25 } 26 $pdo = NULL; 27 if($count == 1){ 28 return TRUE; 29 } else { 30 return FALSE; 31 } 32}
以上のようなPHP文を書きました。$dataにKey=>valueを複数入れると一度にupdateできるようにしました。
$data['dataid'] = $query['dataid']; $data['nameid'] = $query['nameid'];
上記の$dataで実行してみた所,dataid,nameidともにdataidと同じ値になってしまいました。配列に入れる順番を反対にした所、今度はともにnameidの値になってしまいました。
なにかコードの書き方として間違っている部分がありますでしょうか?
bindParamらへんがアヤシイと感じているのですが原因がわからず困っています。入力される$dataはエスケープ処理が必要な為bindParamを"example = 'abcde'
"のようなことはできません。
回答4件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/11/14 06:26