こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

PDOのプレースホルダで変数でUPDATE出来ない

bindValueに値を直接入れると動くのに、変数だと動かない状態になっており、質問をさせて頂きました。

MySQLに「serialcode」と「count」というテーブルを作り、POSTでシリアルコードを送信するとデータベースから対応した今の「count」をマイナス1した値を「count」にUPDATEするというものを作ろうとしております。

下記のコードで動かすと、シリアルコードは正しいものなのに、「count」がマイナス1されません。
ですが最後のechoには入力された値が表示されます。
なのでechoでは値が表示されるのでPOSTの値は受け取っていると思われます。

またbindValueの「$_POST["serialcode"]」の箇所を直接シリアルコードの値にして書き換えると「count」はマイナス1されます。

どのようにしたら変数でUPDATEを動作させる事が出来るでしょうか?

--------------------------------------------------------------------------------------------

$pdo = new PDO($dsn, $user, $password);

$sql = "UPDATE serialcode_table SET count = count - 1 WHERE serialcode = :serialcode2";

$stm = $pdo->prepare($sql);

$stm->bindValue(':serialcode2', $_POST["serialcode"], PDO::PARAM_STR);

$stm->execute();

<div>
echo "シリアルコード:{$_POST["serialcode"]}"
</div>
--------------------------------------------------------------------------------------------

まだまだ勉強不足のところがあり恐縮ですが、原因についてご教示頂けますよう、何卒お願い致します。

投稿日時 - 2017-04-20 20:42:54

QNo.9319849

困ってます

質問者が選んだベストアンサー

>echoでは値が表示されるのでPOSTの値は受け取っていると思われます。

echoではなく、var_dumpなどで「長さ」もチェックしてください。trimせずに使っているので前後に空白が入っていても気付かない可能性があります。


普通は$_POSTを直接使わずに

$serialcode = (isset($_POST['serialcode']))and(is_string($_POST['serialcode'])) ? trim($_POST['serialcode']) : '';
if ($serialcode === '') { エラー処理 }

などとしてから $serialcode を使います。

投稿日時 - 2017-04-21 15:01:04

お礼

ご回答ありがとうございます。
勉強不足でお恥ずかしいですがvar_dumpを初めて使いました。
使ってみたところご指摘の通り空白が入っており本来8桁のはずが80桁になっておりました。
POST送信元にあった空白を消す事で予定していた動作が行えました。

頂いたコードの方は是非使わせて頂き、よりよいものにしたいと思います。
本当にありがとうございました。

投稿日時 - 2017-04-21 18:28:19

ANo.1

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(1)