実現したいこと
PHPでのデータベース検索をbindValueとLIKEを使用して実現したい
前提
Eclipse環境のPHPでWebアプリを作っています。
datetime型のカラムからLIKEで検索をかけた際、構文エラーが発生します。
下記はEclipseの変数ウィンドウで$sqlに入っている文字列です。
「SELECT count(*) AS カウント FROM :table WHERE inspectiondate LIKE :testdate ;」
発生している問題・エラーメッセージ
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 ''テーブル名' WHERE inspectiondate LIKE '2023-03-14%'' at line 1
該当のソースコード
//$testdateには’2023-03-14’が入っています。 try{ $db=getDb(); $sql="SELECT count(*) AS カウント FROM :table WHERE inspectiondate LIKE :testdate;"; $stt = $db->prepare($sql); $stt->bindValue(':table',$tablename,PDO::PARAM_STR); $testdate=e($testdate); →ここでhtmlspecialcharsを使用したエスケープ処理の関数にとぶ。 $stt->bindValue(':testdate ',"{$testdate}%",PDO::PARAM_STR); $stt->execute(); ⇒ここでエラーになり、下記のエラーキャッチにとびます。 if ($row = $stt->fetch(PDO::FETCH_ASSOC)) { if ($row['カウント'] != 0) { $coment='同日に測定を行っています。'; } } $db = NULL; } catch (PDOException $e) { die('エラーメッセージ:' . $e->getMessage()); }
試したこと
下記を2点を試しました。
(1)
コマンドプロンプトにて
SELECT count(*) AS カウント FROM テーブル名 WHERE inspectiondate LIKE '2023-03-14%';
でアクセスすると結果が取得可能。
(2)
問題の部分のbindValueを
$stt->bindValue(':testdate', addcslashes($testdate,'-%'),PDO::PARAM_STR);
に書き換えて実行。上記と同様の構文エラーが表示されます。
補足情報(FW/ツールのバージョンなど)
PHP 7.4.33
Apache/2.4.54 (Win64)
Eclipse Version: 2022-12 (4.26)
Windows 11 Pro(2022年10月にWindows10よりバージョンアップしました)
プログラムの初心者で、PHPを勉強しております。
お手数おかけしますが、ご教示よろしくお願い致します。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2023/03/14 04:32
2023/03/15 10:01