実現したいこと
SESSIONで受け取った日付データを検索条件として、MariaDBからデータを取得したい
前提
統合開発環境_Eclipse上でPHPによりデータベースを接続。
日付で検索をすると下記のエラーがでます。
発生している問題・エラーメッセージ
QLSTATE[42000]: 構文エラーまたはアクセス違反: 1064 SQL 構文にエラーがあります。 使用する正しい構文については、MariaDB サーバーのバージョンに対応するマニュアルを確認してください
該当のソースコード
try{
$db=getDb();
$db->beginTransaction();
$sql="SELECT w.id,w.weather_data,m.temperature,m.humidity,m.updatetime
FROM :table AS m LEFT OUTER JOIN t_weather AS w ON m.t_weather_id=w.id WHERE m.inspectiondate=:inspectiondate;";
$stt = $db->prepare($sql);
$stt->bindValue(':table',e($_SESSION['ssname']));
$stt->bindValue(':inspectiondate',e($_SESSION['inspectiondate']),PDO::PARAM_STR);
$stt->execute();
$result=$stt->fetchAll(PDO::FETCH_ASSOC);
//ここに配列からデータを格納するコード
if($result===false){ $db->rollback(); die('データが取得できませんでした。やり直してください。<br><a href="month_select_form.php">一覧へ戻る</a>'); }
$db->commit();
$db = NULL;
$result=null;
} catch (PDOException $e) {
$db->rollback();
die('エラーメッセージ:' . $e->getMessage());
}
試したこと
上記「$_SESSION['inspectiondate']」には’2023-01-12 12:11:12’とdatetime型のデータが入っていることをeclipseの変数で確認しました。検索条件をいれない別のselect文ではデータベースに接続し、データを取得できています。
コマンドプロンプトで上記SQL文と同じものを入力し、日付を入れて接続するとデータ取得できました。構文ミスはないように思いました。
また、下記の2点のやり方を試したところ、同様のエラーとなりました。
1.
$datetime=date('Y-m-d H:i:s', strtotime(e($_SESSION['inspectiondate'])));
$stt->bindParam(':inspectiondate',$datetime,PDO::PARAM_STR);
$stt->execute();
2.
$datetime="'".($_SESSION['inspectiondate'])."'";
$stt->bindParam(':inspectiondate',$datetime,PDO::PARAM_STR);
$stt->execute();
補足情報(FW/ツールのバージョンなど)
PHP 7.4.33
Apache/2.4.54 (Win64)
Eclipse Version: 2022-12 (4.26)
Windows 11 Pro(2022年10月にWindows10よりバージョンアップしました)
プログラムの初心者で、PHPを勉強しております。
お手数おかけしますが、ご教示よろしくお願い致します。
0 コメント