PHP
1$con = pg_connect("dbname=db0000 user=nobody"); 2if(!$con){ 3 return_error("DB接続失敗"); 4} 5 6$sql = "SELECT TO_CHAR(y.yoyaku_date,'YYYY-FMMM-FMDD') AS yoyaku_date, s.sname, y.start_time, y.end_time " 7."FROM tbl_4_2_1 AS y INNER JOIN tbl_4_2_2 AS s " 8."ON y.scode = s.scode " 9."WHERE TO_DATE(y.yoyaku_date,'YYYY-MM')=TO_DATE('$year-$month','YYYY-MM') " 10."ORDER BY s.scode,y.start_time,y.end_time"; 11$result = @pg_query($con,$sql); 12if(!$result){ 13 return_error( 14 "検索に失敗しました<br> 15 [$result]<br> 16 [$con]<br> 17 [$sql]" 18 ); 19}
PHP
1 return_error( 2 "検索に失敗しました<br> 3 [$result]<br> 4 [$con]<br> 5 [$sql]" 6 );
の部分はブラウザ上で以下のように表示されます。ここで$result,$con,$sqlの中身を確認しようと考えています。ここで、$resultに何も入っていない事が判明しました。
検索に失敗しました [] [Resource id #2] [SELECT TO_CHAR(y.yoyaku_date,'YYYY-FMMM-FMDD') AS yoyaku_date, s.sname, y.start_time, y.end_time FROM table1 AS y INNER JOIN table2 AS s ON y.scode = s.scode WHERE TO_DATE(y.yoyaku_date,'YYYY-MM') =TO_DATE('2020-3','YYYY-MM') ORDER BY s.scode,y.start_time,y.end_time]
以下の一行の処理により、$resultの中に$conで指定しているdb0000に対して命令を飛ばした内容が入ると思ったのですが失敗して$resultにはfalseが入っているようです。
PHP
1$result = pg_query($con,$sql);
マニュアルを読んでみたところ、pg_query_params()という上位互換?と思われる
関数があった為、それも使ってみました。
PHP
1$result = pg_query_params($con,$sql);
↑の結果のエラーは、
Warning: pg_query_params() expects parameter 1 to be string, resource given in ファイルパス
というものです。「パラメータ1が文字列であることを期待しています。」との事なので、
pg_query_paramsに2つ渡す引数のうち、1つ目である$conが間違っているのかなと予想しました。
$conの直近の代入である、
PHP
1$con = pg_connect("dbname=db0000 user=nobody"); 2if(!$con){ 3 return_error("DB接続失敗"); 4}
を見直してみても、どうもここの部分はエラーに関与していないように思ってしまいます。
$conには、ブラウザ上に表示されたように「Resource id #2」という文字列が入っていると判断した為です。
エラー原因に辿り着く事が出来なかった為、何かヒントが欲しい状況です。
何かお気づきの方がいらっしゃいましたらご指摘いただきたいです。
よろしくお願いします。
環境
・postgreSQL 9.4.26
・PHP 5.3.3
・virtualBox6.1.4 r136177(Qt5.6.2)
・CentOS-6.8-x86_64-minimal.iso
回答1件
あなたの回答
tips
プレビュー