質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

セッション

Sessionはクライアントがサーバに送ったすべてのリクエストのことを指します。

MariaDB

MariaDBは、MySQL派生のオープンソースなリレーショナルデータベースシステムです。 また、MySQLとほぼ同じデータベースエンジンに対応しています。

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

Q&A

解決済

1回答

651閲覧

PHPのデータベース接続 SESSIONの受け渡しについて

tikuwachan

総合スコア6

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

セッション

Sessionはクライアントがサーバに送ったすべてのリクエストのことを指します。

MariaDB

MariaDBは、MySQL派生のオープンソースなリレーショナルデータベースシステムです。 また、MySQLとほぼ同じデータベースエンジンに対応しています。

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

0グッド

0クリップ

投稿2023/03/01 09:51

実現したいこと

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を勉強しております。
お手数おかけしますが、ご教示よろしくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

同様の間違いでの質問はよくあるのですが、バインドできるのは”値”だけです。
テーブル名やカラム名などはできません。

また、バインド時にエスケープしてくれるのでe() のような処理は不要です。
コードが半端であるためどういうメソッドなのか分からないですが、HTMLエスケープであれば使う場所間違っています。

投稿2023/03/01 09:54

編集2023/03/01 10:07
m.ts10806

総合スコア80859

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2023/03/01 10:05 編集

そもそもSELECTでトランザクション→ロールバックって意味がないような・・・。
tikuwachan

2023/03/01 10:08

m.ts10806様、ご指摘ありがとうございます。 テーブル名を直接入れるとデータ取得できました。 ありがとうございました!
tikuwachan

2023/03/01 10:10

もう少し勉強がすすんでからトランザクション処理について再度考えてみたいと思います。 ありがとうございます。
m.ts10806

2023/03/01 10:22

データを取得するだけなのでロールバックは不要ですね。 「コミット」が伴う処理が対象です。
tikuwachan

2023/03/01 23:45

m.ts10806様、取得のみでロールバックは不要とのこと、承知しました。 ご教示くださり、ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問