###PDOにて、プレースホルダーを利用したいです。
現在、phpにて簡単な管理画面を作成しております。
投稿を編集する際のクエリ
php
1$sql = "UPDATE news SET day = :day, title = :title, kind = :kind, body = :body WHERE id = :page";
こちらの:pageを$pageにすると上手く動くのですがプレースホルダを利用したいです。
###全体のソースコード
php
1//変数$pageにクエリを代入 2$page = $_GET[id]; 3 4 <?php 5 try { 6 $dbh = 'mysql:dbname=test_db;host=133.167.38.105;charset=utf8'; 7 $user = 'test'; 8 $password = ''; 9 10 $PDO = new PDO($dbh, $user, $password); 11 $PDO->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 12 //こちらが上記のsql文です。このidを$pageにすれば動きますがプレースホルダを利用したいです。 13 $sql = "UPDATE news SET day = :day, title = :title, kind = :kind, body = :body WHERE id = :page"; 14 $stmh = $PDO->prepare($sql); 15 //こちらのbindValueを使って:pageに$pageの値をバインドしています。 16 $stmh->bindValue(":page", $page, PDO::PARAM_INT); 17 $result = $stmh->execute([ 18 ':day' => filter_input(INPUT_POST, 'day'), 19 ':title' => filter_input(INPUT_POST, 'title'), 20 ':kind' => filter_input(INPUT_POST, 'kind'), 21 ':body' => filter_input(INPUT_POST, 'body'), 22 ]); 23 if ($result) { 24 $message = ''; 25 } 26 } catch (PDOException $e) { 27 $error = 'データベースに接続できませんでした。' . $e->getMessage(); 28 } 29?>
削除機能などはこの文法で実装できたので、どこが悪いのかいまいち分かりません。
###やってみたこと
どこが間違えているかを明確にするために$pageと:pageで試した
$pageの場合
編集が実行された。
:pageの場合
エラーなどは一切表示されないが、データの更新だけが行えない。
var_dump($page);
の結果には欲しいクエリ番号が代入されていた。
初心者な質問で大変申し訳ありませんが、ご回答いただけますと幸いです。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/04/29 07:48
2020/04/29 07:53
2020/04/29 08:08