AS-B
@AS-B

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

SQL分で今月の指定をしたいです。

解決したいこと

テーブルから今月分という指定でデータを取り出したいのですがうまくできません。
また、型が違う的なエラーですが意味が分かりません。

発生している問題・エラー

Uncaught TypeError: odbc_result(): Argument #1 ($statement) must be of type resource, bool given

該当するソースコード

"SELECT SUM(※数量のカラム) FROM ※テーブル WHERE DATE_FORMAT(※日時のカラム, '%Y%m') = DATE_FORMAT(NOW(), '%Y%m') and ※物のカラム = '01' and  ※区分1カラム = '01' and ※区分2カラム = '01'";

以下のように指定した場合はできています。

"SELECT SUM(※数量のカラム) FROM ※テーブル WHERE ※物のカラム = '01' and ※日時のカラム = '20230214' and ※区分1カラム = '01' and ※区分2カラム = '01'";

自分で試したこと

トライ&エラーで検索しながらいろいろ書いてみましたが全てダメでした。
型が違う?という事で、そもそも根本的な何かが違う気もしています。
今月分、先月文、去年分など指定して使いたいので、どなたかご教授いただけますと幸いです。
よろしくお願い申し上げます。

※追記
以下のように書いたら一先ず目的の動きをしました。

$AAA = "SELECT SUM(※数量のカラム) FROM ※テーブル WHERE MONTH(※日時のカラム) = '2' AND YEAR(※日時のカラム) ='2023' and ※物のカラム = '01' and  ※区分1カラム = '01' and ※区分2カラム = '01'";
$BBB = odbc_exec($conn, $AAA);
print floor(odbc_result($BBB,1));

しかし、毎月入力を変更できないので以下のように変えたらエラーでした。

$AAA = "SELECT SUM(※数量のカラム) FROM ※テーブル WHERE MONTH(※日時のカラム) = MONTH(current_date) AND YEAR(※日時のカラム) =YEAR(current_date) and ※物のカラム = '01' and  ※区分1カラム = '01' and ※区分2カラム = '01'";
$BBB = odbc_exec($conn, $AAA);
print floor(odbc_result($BBB,1));

※追記2

リソース型・ブール型がよく分からず苦労しておりましたが、以下のようにして(無理やり?)解決できました。

$year = date("Y");
$month = date('m');
$lastyear = date("Y") - 1;
$lastmonth = date('m') - 1;

$AAA = "SELECT SUM(※数量のカラム) FROM ※テーブル WHERE MONTH(※日時のカラム) = '$month' and YEAR(※日時のカラム) = '$year' and ※物のカラム = '01' and  ※区分1カラム = '01' and ※区分2カラム = '01'";
//先月や昨年は$last~の方を使う
$BBB = odbc_exec($conn, $AAA);
print floor(odbc_result($BBB,1));

アドバイスいただきありがとうございました。

0

2Answer

odbc_result()はPHPの関数としてエラーを返しているので、PHPのソースが「該当するソースコード」になりますよ。SQLはひとまず置いておいて良いような気がします。

0Like

Comments

  1. @AS-B

    Questioner

    今回もアドバイスいただき誠にありがとうございます。
    なるほど、PHPのエラーなのですね・・・
    追記させていただきましたが、そのような内容で余計にSQLだと思っておりました。
    アドバイスをヒントにさせていただき改めて考えてみます。

ODBCは使ったことがないのでマニュアルを見ての回答になります。

エラーメッセージを要約すると、odbc_result関数の引数$statementはresource型でなければならないがbool型が与えられた、という内容です。
記載のコードでいうと変数$BBBの値がbool型という事になります。

変数$BBBにはodbc_exec関数の戻り値が入っていますが、マニュアルを見ると「エラー時には、falseを返します」とあるので、ここで何らかのエラーが発生しているのでしょう。

odbc_errorodbc_errormsgで直近のエラーを取得できるようなので、試してみてはいかがでしょうか。

0Like

Comments

  1. @AS-B

    Questioner

    今回もアドバイスいただき誠にありがとうございました。
    いただいた内容を元に勉強させていただきました。
    型の理解ができておらず苦労し、いろいろやってみましたが結果は追記2の形でうまく動作しました。

Your answer might help someone💌