前提・実現したいこと
PHPにてDBに対してUPDATEを実行したいのですが、PDOを用いた際にカラムや値に変数をバインドする方法がうまくいかない状態です。
やりたいこととしてはex_tableの指定した日付の列の2つのカラムの値をプラス1するように更新したいと思っています。
以下のような方法を試しているのですがどこがおかしいかお教え頂けたら幸いです。
該当のソースコード
php
1 $str_date = '2020-10-10';//ここで日付指定 2 3 //カラム名を指定する変数 4 $sports = 'tennis'; 5 $food = 'rice'; 6 7 $dbh = db_connect(); 8 9 //以下が問題の箇所 10 $statement = $dbh->prepare('UPDATE ex_table SET :sports = :sports + 1, :food = :food + 1, WHERE date = :str_date'); 11 12 $statement->bindParam(:sports, $sports, PDO::PARAM_INT); 13 $statement->bindParam(:food, $food, PDO::PARAM_INT); 14 $statement->bindParam(:str_date, $str_date, PDO::PARAM_INT); 15 $statement->execute(); 16 $dbh = null; 17 18 19 20 //また別の方法として以下のパターンも試してみました 21 $statement = $dbh->prepare('UPDATE ex_table SET ? = ? + 1, ? = ? + 1, WHERE date = ?'); 22 23 $statement->bindParam(1, $sports, PDO::PARAM_INT); 24 $statement->bindParam(2, $sports, PDO::PARAM_INT); 25 $statement->bindParam(3, $food, PDO::PARAM_INT); 26 $statement->bindParam(4, $food, PDO::PARAM_INT); 27 $statement->bindParam(5, $str_date, PDO::PARAM_INT); 28 $statement->execute(); 29 $dbh = null; 30 31 32 //ご回答をいただく中で以下をさらに試してみましたので追記します 33 $statement = $dbh->prepare('UPDATE ex_table SET sports = :sports + 1, food = :food + 1, WHERE date = :str_date'); 34 35 $statement->bindColumn('sports', $sports); 36 $statement->bindColumn('food', $food); 37 $statement->bindParam(':sports', $sports, PDO::PARAM_INT); 38 $statement->bindParam(':food', $food, PDO::PARAM_INT); 39 $statement->bindParam(':str_today', $str_date, PDO::PARAM_STR); 40 $statement->execute(); 41 $dbh = null;
補足情報(FW/ツールのバージョンなど)
PHP 7.3
DBはMySQL
フレームワークなど無し
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/10/13 08:12
2020/10/13 08:13
2020/10/13 08:20 編集
2020/10/13 08:24
2020/10/13 08:26
2020/10/13 08:53 編集
2020/10/13 09:12
2020/10/13 09:27
2020/10/13 09:30
2020/10/13 09:35