実現したいこと
データベースにあらかじめ登録してあるデータを取得してくる
前提
XAMPPを使用してデータベースにデータを登録したあと
inputタグに入力した値をSQLのWHEREで条件を絞って取得したいのですが
bindValueの名前付きプレースホルダのところでエラーがでてしまいます。
入力された値をphpの変数にいれてWHEREにいれると表示するのでプレースホルダのところで間違ってるのは間違いないとおもうのですが色々調べてもわからないのでご教授いただきたいです。
発生している問題・エラーメッセージ
Fatal error: Uncaught PDOException: 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 ':low' at line 1 in C:\xampp\htdocs\task\step4\task04-2.php:42 Stack trace: #0 C:\xampp\htdocs\task\step4\task04-2.php(42): PDO->query('SELECT * FROM m...') #1 {main} thrown in C:\xampp\htdocs\task\step4\task04-2.php on line 42
該当のソースコード
PHP
1 $DB_HOST = 'localhost'; 2 $DB_PORT = 3306; 3 $DB_DATABESE = 'task'; 4 $DB_USERNAME = 'ksoluser'; 5 $DB_PASSWORD = 'ksolpass'; 6 $DB_OPTION = 'charset=utf8'; 7 8 $get_low = (int)$_GET['lower']; 9 $get_upp = (int)$_GET['upper']; 10 11 12 13 14 try{ 15 $pdo = new PDO("mysql:host={$DB_HOST};port={$DB_PORT};dbname={$DB_DATABESE};{$DB_OPTION}",$DB_USERNAME,$DB_PASSWORD); 16 }catch(PDOException $e){ 17 print('Error:'.$e->getMessage()); 18 die(); 19 } 20 echo "接続成功"; 21 22 // SQL文指定 23 $stmt = $pdo->query("SELECT * FROM m_fruits WHERE :low < value AND value < :upp"); 24 25 // SQLインジェクション対策 SQL文にphp変数をいれないようにバインドで処理 26 $stmt->bindValue(':low', $get_low, PDO::PARAM_INT); 27 $stmt->bindValue(':upp', $get_upp, PDO::PARAM_INT); 28 29 // SQL文実行 30 $stmt->execute(); 31 32 // 実行結果を複数件取得して変数に格納(1つならfetch()) 33 $fruits = $stmt->fetchAll();
補足情報(FW/ツールのバージョンなど)
MySQL ver:15.1

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2023/07/13 05:17