アプリ版:「スタンプのみでお礼する」機能のリリースについて

$dbh = new PDO("mysql:host=localhost;dbname=$databasename;charset=utf8", $user, $pass);
$dbh->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
   $sql = "UPDATE $dbtablename
       SET kankatsu = ?, subject = ?, naiyou = ?, tantou = ?,
       ren1 = ?  -(略)-  ren50 = ?
       WHERE id = ?";
$stmt = $dbh->prepare($sql);


phpにて上記のように「ren1 = ?  -(略)-  ren50 = ?」の部分を
  for($i=1;$i<=50;$i++){
ren.$i = ?;
}

としたのですが、
エラー発生: SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'for(=1;<=50;++){ ren. = ?; } WHERE id = ?' at line 7

というエラーが出ます。
ren.$i = ?;を
"ren".$i = ?;
ren."$i" = ?;
'ren'.'$i' = ?;
[ren.$i] = ?;
と変化させてみましたがエラーまたは全く動作しません。どうかご教示お願いします。

質問者からの補足コメント

  • お忙しいなか早速の回答ありがとうございます。
    試してみたのですが動作しないため""や''や半角スペース,for文との組み合わせ等いくつか実行し、implode,range等をphpのマニュアルで読んでみました。
    もし可能ならばもう少しご教示いただけないでしょうか。
    お願いします。

    No.1の回答に寄せられた補足コメントです。 補足日時:2018/09/08 14:04
  • ありがとうございます。本当にありがとうございます。
    $sql =
    $sql = と分けるんですね。$sqlひとつに全て入れると勘違いしていました。お忙しいところ本当にありがとうございます。

    No.2の回答に寄せられた補足コメントです。 補足日時:2018/09/11 20:28

A 回答 (2件)

$sql = "UPDATE hoge SET kankatsu=?,subject=?,naiyou=?,tantou=?,";


$sql.= implode(",",array_map(function($x){return "ren".$x."=?";},range(1,50)));
$sql.=" WHERE id = ?";
print $sql;

とすると

UPDATE hoge SET kankatsu = ?, subject = ?, naiyou = ?, tantou = ?,ren1=?,ren2=?,ren3=?,ren4=?,ren5=?,ren6=?,ren7=?,ren8=?,ren9=?,ren10=?,ren11=?,ren12=?,ren13=?,ren14=?,ren15=?,ren16=?,ren17=?,ren18=?,ren19=?,ren20=?,ren21=?,ren22=?,ren23=?,ren24=?,ren25=?,ren26=?,ren27=?,ren28=?,ren29=?,ren30=?,ren31=?,ren32=?,ren33=?,ren34=?,ren35=?,ren36=?,ren37=?,ren38=?,ren39=?,ren40=?,ren41=?,ren42=?,ren43=?,ren44=?,ren45=?,ren46=?,ren47=?,ren48=?,ren49=?,ren50=? WHERE id = ?

となります。
あとはprepareで全値をわたしてやればいいでしょう
この回答への補足あり
    • good
    • 0

print implode(",",array_map(function($x){return "ren".$x."=?";},r

ange(1,50)));
この回答への補足あり
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!