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

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

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

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

PDO

PDO(PHP Data Objects)はPHPのデータベース抽象化レイヤーです。

PHP

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

Q&A

解決済

3回答

3412閲覧

php文でフォームから検索をしたときに該当する結果を表示させたい

ariiiiiga

総合スコア66

PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

PDO

PDO(PHP Data Objects)はPHPのデータベース抽象化レイヤーです。

PHP

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

0グッド

1クリップ

投稿2019/03/19 07:06

編集2019/03/22 04:21

前提・実現したいこと

検索してDBの該当結果を表示する機能を作っています。

以前MYSQLでDB接続していた物をPostgresql用に書き換えたのですが検索結果が見つからない状態なのか“検索対象は見つかりませんでした。”となります。
エラーもでていないのでどこを直せばいいのかがわからなくなってしまいました。

*DBへの接続確認済み
*Postgres用に変更した個所はコメントアウトで”//Postgres用に変更した“と記載しています。
*変更したのはPHP文のみです。

よろしくお願いいたします。

該当のソースコード

<?php ini_set( 'display_errors', 1 ); ini_set( 'error_reporting', E_ALL ); // 取得件数 define('PAGE_LIMIT', 10); $pdo = new PDO ( "pgsql:host=myhost;port=5432;dbname=mydb;user=myuser;password=*****" ); //カラム名を小文字にする $pdo ->setAttribute(PDO::ATTR_CASE, PDO::CASE_LOWER); // SQL実行に失敗した場合、例外を発生させる $pdo->setAttribute ( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION ); $pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); // リクエストパラメータの取得 $search = filter_input(INPUT_GET, 'search'); $p = !is_numeric(filter_input(INPUT_GET, 'p')) ? 0 : filter_input(INPUT_GET, 'p'); $name = filter_input(INPUT_GET, 'name', FILTER_SANITIZE_SPECIAL_CHARS); $shop = filter_input(INPUT_GET, 'shop', FILTER_SANITIZE_SPECIAL_CHARS); $user_id = filter_input(INPUT_GET, 'user_id', FILTER_SANITIZE_SPECIAL_CHARS); // 取得開始位置 $offset = $p * PAGE_LIMIT; // SQL生成 $where = []; $whereSql = null; if ( $name ) { $where[] = "name like :name"; } if ( $shop ) { $where[] = "shop like :shop"; } if ( $user_id ) { $where[] = "user_id = :user_id"; } if ( count($where) > 0 ) { $whereSql = " where ".implode(' OR ', $where); } // 表示用 $sql = $pdo->prepare('select * from hosts '.$whereSql.' order by post_id desc limit :limit offset :offset'); $sql->bindValue(":offset", $offset, PDO::PARAM_INT); $sql->bindValue(":limit", PAGE_LIMIT, PDO::PARAM_INT); if ( $name ) { $sql->bindValue(":name", "%" . addcslashes($name, '\_%') . "%", PDO::PARAM_STR); } if ( $shop ) { $sql->bindValue(":shop", "%" . addcslashes($shop, '\_%') . "%", PDO::PARAM_STR); } if ( $user_id ) { $sql->bindValue(":user_id", addcslashes($user_id, '\_%') , PDO::PARAM_STR); } $sql->execute(); // 検索結果取得 $result = $sql->fetchAll(); // 件数取得 $totalRow = $pdo->query('select COUNT(*) AS "TOTAL" from hosts '.$whereSql); if ( $name ) { $totalRow->bindValue(":name", "%" . addcslashes($name, '\_%') . "%", PDO::PARAM_STR); } if ( $shop ) { $totalRow->bindValue(":shop", "%" . addcslashes($shop, '\_%') . "%", PDO::PARAM_STR); } if ( $user_id ) { $totalRow->bindValue(":user_id", addcslashes($user_id, '\_%') , PDO::PARAM_STR); } $totalRow->execute(); $all = $totalRow->fetch(PDO::FETCH_ASSOC); ?> <!DOCTYPE HTML> <html lang="ja"> <head> <meta charset="UTF-8"> <meta http-equiv="Content-Style-Type" content="text/css"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <link rel="stylesheet" as="style" href="https://stackpath.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" type="text/css" media="all" onload="this.rel='stylesheet'"> <link rel="stylesheet" as="style" href="https://stackpath.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" type="text/css" media="all" onload="this.rel='stylesheet'"> </head> <body> <div class="make"> <style type="text/css"> .make{ text-align: center; font-size:15px; font-weight:bold; font-size:20px; } input{ padding:10px 10px ; border-radius:30px; margin:10px 0; } </style> <input type="button" onclick="location.href='user_register.php'"value="MyIDを発行・確認"> <input type="button" onclick="location.href='post_new_review.php'"value="NEWLOGを書く"> </div> <style type="text/css"> h3 { text-align: center; } </style> <h3>検索フォーム</h3> <div class="col-xs-12 well"> <form method="get"> <div class="form-group "> <label for="InputName">ホスト名</label> <input name="name" class="form-control" id="InputName" value="<?= $name ?>"> <label for="InputShop">店舗名</label> <input name="shop" class="form-control" id="InputShop" value="<?= $shop ?>"> <label for="InputUser_id">ユーザーID</label> <input name="user_id" class="form-control" id="InputUser_id" value="<?= $user_id ?>"> <button type="submit" class="btn btn-default" name="search" value="1">検索</button> </div> </form> </div> <?php if ( $search ) : ?> <div class="col-xs-12" > <?php if ( $all['TOTAL'] > 0 && $search ) : ?> <p class="alert alert-success"><?= number_format($all['TOTAL']) ?>件見つかりました。</p> <table class="table"> <thead> <tr> <th>名前</th> <th>店舗名</th> <th>評価</th> <th>コメント</th> </tr> </thead> <tbody> <?php foreach($result as $key => $value) : ?> <tr> <td><?= $value['name'] ?></td> <td><?= $value['shop'] ?></td> <td><?php if ( $value['point'] == '-1' ) : ?> <img src="#"> <?php elseif ( $value['point'] == '1' ) : ?> <img src="#"> <?php elseif ( $value['point'] == '3' ) : ?> <img src="#"> </td><?php endif; ?> <td><a href ="show_comment.php?post_id=<?= $value['post_id'] ?>">コメント</a></td> </tr> <?php endforeach; ?> </tbody> </table> <!-- ページネーション --> <?php if ( $p > 0 ) : ?> <a href="index.php?search=1&name=<?= $name ?>&shop=<?= $shop ?>&user_id=<?= $user_id ?>&p=<?= $p-1 ?>" class="pull-left">戻る</a> <?php else : ?> <span class="pull-left">最新</span> <?php endif; ?> <?php if ( $all['TOTAL'] - (PAGE_LIMIT * $p ) > PAGE_LIMIT ) : ?> <a href="index.php?search=1&name=<?= $name ?>&shop=<?= $shop ?>&user_id=<?= $user_id ?>&p=<?= $p+1 ?>" class="pull-right">次へ</a> <?php else : ?> <span class="pull-right">末尾</span> <?php endif; ?> <?php else : ?> <p class="alert alert-danger">検索対象は見つかりませんでした。</p> <?php endif; ?> </div> <?php endif; ?> </body> </html>

試したこと

ここに問題に対して試したことを記載してください。

補足情報(FW/ツールのバージョンなど)

Windows10

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

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

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

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

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

m.ts10806

2019/03/19 07:30

このコード 自分できちんと全て「どのような意図があってそう書いたか」説明できますか?
m.ts10806

2019/03/19 07:32

SQL実行する際は直接DBに対して実行してみて想定する結果が返ってくるか確認するのが基本ですが、そこはできてるんですよね? そこができてないとPHPから実行しても結果が返ってこないのは当然です。
m.ts10806

2019/03/19 07:36

あとインデントは揃えられたほうがいいですね。 不具合見つけづらくなって混乱しても良いのでしたらそれでもいいですけど、プログラミングをしていく上では致命的です。
m.ts10806

2019/03/19 07:37

あとそろそろ「答えだけください」の姿勢はやめてください。 ステップアップしたいのでしたら自分でデバッグもある程度すべきですし、その様子が見られないコードを質問として出されても「丸投げ」という印象を与えるだけです。
退会済みユーザー

退会済みユーザー

2019/03/19 07:47

「select *, COUNT(*) OVER() AS "TOTAL" 」が意味わからんです。何をやろうとしているのか説明付けてね。
guest

回答3

0

  1. try-catchでエラーを拾うこと。

PDOException拾えばデータベースに関するエラーを拾ってくれる。
PDOでDBを扱う場合は必須。
0. SQLをPHPからではなく直にDBに対して実行して取得したい結果を得られるか確認。
bindValueしているところは実際にPOSTされる値などを入れてみる。
直接実行して欲しい情報が得られないのならPHPから実行しても当然得られない
0. 入力した情報が正しく取得できているかデバッグ
echo __LINE__;でファイルの行数を出力する方法も有用
0. インデントはきちんと揃える
それだけで不具合の多くは解決しやすくなるそうですよ。
0. 変数名は適切につける
違う用途なら違う名前。特に文字列と数値以外は型も分かるようにした方が良い。
例えばSQL実行結果を格納するからってそのまま同じ変数使ってたらバグの元。
1つの変数には1つ以上の仕事をさせないこと。
0. エラーが出ない=想定通りに動くではない
一般的に言われるエラーとは構文ミスの話。ロジックが間違っていれば当然想定通りにはならない。
書いた通りにしか動かないのがプログラム。ロジックの間違いを見つけるには地道なデバッグしかない。
0. 必ず成功する前提で組まれたプログラムほどバグだらけ
PHPの機能を使う場合はPHPマニュアルを確認し、返り値は必ず拾って処理に反映すること。
自分で関数を作る場合も「実行しっぱなし」を出来る限り作らないこと

PostgreSQLに限らず、全般的に徹底してください。
それだけで質問することなく自己解決できるようになることも増えます。
長文質問を打つ時間で自分で解決できる方が圧倒的に早いですよ。


ちなみに。
マニュアル確認やデバッグをすることより
自分の手に追えないコードを理解しないままなんとなく進めていくことの方が
何百倍もコストもストレスも高いです。
後者は結局丸投げのような質問をしてしまうことになり、回答者の時間を使うことになります。
理解しきれてないコードに対する回答なので更に理解できない部分が増えます。
悪循環ですね。

もっと小さいコードからひとつずつ着実に理解しながら組み上げていくのを強く勧めます。

自己解決できたらそれが一番ですから。

投稿2019/03/19 08:22

編集2019/03/20 06:50
m.ts10806

総合スコア80842

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

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

m.ts10806

2019/03/19 10:38

低評価された方、差し支えなければコメントください。 私怨であればやめてください。
guest

0

3.5. ウィンドウ関数
PostgreSQLでのOVER()って、ウィンドウ関数だと思うのだけど、全然必要な文法に則ってない書き方をしているので、そのSQLが何をしようとしているか想像つかない。
つまり、クエリーが動いてないと思われます。

それと、クエリーで「select 」なら対象のレコードを全カラム返すけど、
「select count(
)」ならレコード数ひとつ返すだけなので、
それを「select , count()」って書いたところで同時には動かないんよ。
それぞれ別のクエリーとして実行してほしい。

で、何をやりたいのか、やろうとしているのかわからない謎コードなので、
これ以上アドバイスしにくいです。

データベースを検索した結果を表示しようとしている、とのことなので、
おそらくヒットした件数を求めて表示するのと、
offsetとlimitでページネーション前提の表示処理なのかなと仮定すると、
「select count(*)」する場面ではoffsetとlimitはつけない。
これで一つクエリーを実行して件数を変数に取得しておく。
そしてクエリーを分けて、「select * ~ offset~limit~」を実行して
表形式にでも仕立てて表示する流れ。

投稿2019/03/19 07:49

編集2019/03/19 07:57
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

m.ts10806

2019/03/19 07:57

>それを「select *, count(*)」って書いたところで同時には動かないんよ。 過去質問の回答で既に説明済みだったと思います。 つまり、この質問者は逆戻りしている。
退会済みユーザー

退会済みユーザー

2019/03/19 08:00

どんだけ過去の質問と回答、覚えてるのさ。 見逃していたり忘れていたりするなら、再度指摘する回答を書くだけ。 「いい加減理解しなさいよ」とか指摘したところで、同じミスをするなら再度指摘するだけ。 人格攻撃チックになったらいかんよ。
m.ts10806

2019/03/19 08:04

それは失礼しました。 覚えているわけではないですが、「こんなコードだったっけな」と疑問に思ってなんとなく過去の質問を見返してみただけです。同じ人に同じことを何度も言うのって無駄ですし、何のために質問して何のための回答だったんだろうと疑問に思うことはよくあるので。実際に人格攻撃をしているつもりはないですが、表現には気をつけます。
m.ts10806

2019/03/19 08:09 編集

それにこの方、結構、勝手にもらったコードを壊して質問してるので、指摘したところでまた壊されるなって思ったら、あんまり回答する意味無くなると思いますし、結局困るのはこの質問者さんなので、そこは自覚してもらいたいとは思ってます。
m.ts10806

2019/03/19 08:09

と、m6uさんに言っても仕方ないですね。失礼しました。 回答者としてのスタンスの違いはあるでしょうし。 連投も失礼しました。
退会済みユーザー

退会済みユーザー

2019/03/19 08:13

冷静になろう。もうちょっと力を抜いていいと思いますよ。
m.ts10806

2019/03/19 08:14

そうですね。ごもっともです。
ariiiiiga

2019/03/19 10:12

$sql = $pdo->prepare('select COUNT(*) OVER() AS "TOTAL" from hosts '.$whereSql.' order by post_id desc'); $sql = $pdo->prepare('select * from hosts '.$whereSql.' order by post_id desc limit :limit offset :offset'); 分けるというのはこういうことでしょうか?
退会済みユーザー

退会済みユーザー

2019/03/19 10:18

phpの処理に組み込む前に、SQLの単体テストをパスさせてからやってくださいね。 でたらめなSQLを書いても絶対に動きませんから。 それと、ウィンドウ関数の説明(リンク先)を読んで理解していただけましたか? OVER()をなんの意図で書いているのかは知りませんが、文法エラーですよそれ。
m.ts10806

2019/03/22 04:43

> phpの処理に組み込む前に、SQLの単体テストをパスさせてからやってくださいね。 ここはなんとしても伝わってほしかったですね。3回答中2回答に言及されていることなのでそれだけ大事と言うことなんですが・・・。
guest

0

ベストアンサー

回答依頼ありがとうございました。
動かすだけなら以下で大丈夫かも。

ただm6uさんの回答のように件数を取得するSQLと表示用のSQLを分けた方が良いと思います。

php

1//Postgres用に変更した 2$result = $sql->fetchAll(); 3 4//Postgres用に変更した 5//$all = $sql->fetch(PDO::FETCH_ASSOC); 6 7// 追記部分 8if ( $result ) { 9 $all['TOTAL'] = $result[0]['TOTAL']; 10} 11

SQL

1// 件数取得 2$sql = $pdo->prepare('select COUNT(*) AS "TOTAL" from hosts '.$whereSql); 3 4// 表示用 5$sql = $pdo->prepare('select * from hosts '.$whereSql.' order by post_id desc limit :limit offset :offset');

php

1<?php 2 ini_set( 'display_errors', 1 ); 3 ini_set( 'error_reporting', E_ALL ); 4 // 取得件数 5 define('PAGE_LIMIT', 10); 6 7 $pdo = new PDO ( "pgsql:host=myhost;port=5432;dbname=mydb;user=myuser;password=*****" ); 8 9 //カラム名を小文字にする 10 $pdo ->setAttribute(PDO::ATTR_CASE, PDO::CASE_LOWER); 11 // SQL実行に失敗した場合、例外を発生させる 12 $pdo->setAttribute ( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION ); 13 $pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); 14 15 // リクエストパラメータの取得 16 $search = filter_input(INPUT_GET, 'search'); 17 $p = !is_numeric(filter_input(INPUT_GET, 'p')) ? 0 : filter_input(INPUT_GET, 'p'); 18 $name = filter_input(INPUT_GET, 'name', FILTER_SANITIZE_SPECIAL_CHARS); 19 $shop = filter_input(INPUT_GET, 'shop', FILTER_SANITIZE_SPECIAL_CHARS); 20 $user_id = filter_input(INPUT_GET, 'user_id', FILTER_SANITIZE_SPECIAL_CHARS); 21 22 // 取得開始位置 23 $offset = $p * PAGE_LIMIT; 24 25 // SQL生成 26 $where = []; 27 $whereSql = null; 28 29 if ( $name ) { 30 $where[] = "name like :name"; 31 } 32 if ( $shop ) { 33 $where[] = "shop like :shop"; 34 } 35 if ( $user_id ) { 36 $where[] = "user_id = :user_id"; 37 } 38 39 if ( count($where) > 0 ) { 40 $whereSql = " where ".implode(' OR ', $where); 41 } 42 43 // 表示用 44 $sql = $pdo->prepare('select * from hosts '.$whereSql.' order by post_id desc limit :limit offset :offset'); 45 46 $sql->bindValue(":offset", $offset, PDO::PARAM_INT); 47 $sql->bindValue(":limit", PAGE_LIMIT, PDO::PARAM_INT); 48 if ( $name ) { 49 $sql->bindValue(":name", "%" . addcslashes($name, '\_%') . "%", PDO::PARAM_STR); 50 } 51 if ( $shop ) { 52 $sql->bindValue(":shop", "%" . addcslashes($shop, '\_%') . "%", PDO::PARAM_STR); 53 } 54 if ( $user_id ) { 55 $sql->bindValue(":user_id", addcslashes($user_id, '\_%') , PDO::PARAM_STR); 56 } 57 $sql->execute(); 58 59 // 検索結果取得 60 $result = $sql->fetchAll(); 61 62 // 件数取得 63 $totalRow = $pdo->query('select COUNT(*) AS "TOTAL" from hosts '.$whereSql); 64 $all = $totalRow->fetch(PDO::FETCH_ASSOC); 65 66?> 67<!DOCTYPE HTML> 68<html lang="ja"> 69<head> 70 <meta charset="UTF-8"> 71 <meta http-equiv="Content-Style-Type" content="text/css"> 72 <meta name="viewport" content="width=device-width, initial-scale=1.0"> 73 <link rel="stylesheet" as="style" href="https://stackpath.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" type="text/css" media="all" onload="this.rel='stylesheet'"> 74 <link rel="stylesheet" as="style" href="https://stackpath.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" type="text/css" media="all" onload="this.rel='stylesheet'"> 75</head> 76 <body> 77 78 <div class="make"> 79 <style type="text/css"> 80 .make{ 81 text-align: center; 82 font-size:15px; 83 font-weight:bold; 84 font-size:20px; 85 } 86 input{ 87 padding:10px 10px ; 88 border-radius:30px; 89 margin:10px 0; 90 } 91 </style> 92 <input type="button" onclick="location.href='user_register.php'"value="MyIDを発行・確認"> 93 <input type="button" onclick="location.href='post_new_review.php'"value="NEWLOGを書く"> 94 </div> 95 96 <style type="text/css"> 97 h3 { 98 text-align: center; 99 } 100 </style> 101 <h3>検索フォーム</h3> 102 <div class="col-xs-12 well"> 103 <form method="get"> 104 <div class="form-group "> 105 <label for="InputName">ホスト名</label> 106 <input name="name" class="form-control" id="InputName" value="<?= $name ?>"> 107 <label for="InputShop">店舗名</label> 108 <input name="shop" class="form-control" id="InputShop" value="<?= $shop ?>"> 109 <label for="InputUser_id">ユーザーID</label> 110 <input name="user_id" class="form-control" id="InputUser_id" value="<?= $user_id ?>"> 111 <button type="submit" class="btn btn-default" name="search" value="1">検索</button> 112 </div> 113 </form> 114 </div> 115 116 117 <?php if ( $search ) : ?> 118 <div class="col-xs-12" > 119 <?php if ( $all['total'] > 0 && $search ) : ?> 120 <p class="alert alert-success"><?= number_format($all['total']) ?>件見つかりました。</p> 121 <table class="table"> 122 <thead> 123 <tr> 124 <th>名前</th> 125 <th>店舗名</th> 126 <th>評価</th> 127 <th>コメント</th> 128 </tr> 129 </thead> 130 <tbody> 131 <?php foreach($result as $key => $value) : ?> 132 <tr> 133 <td><?= $value['name'] ?></td> 134 <td><?= $value['shop'] ?></td> 135 <td><?php if ( $value['point'] == '-1' ) : ?> 136 <img src="#"> 137 <?php elseif ( $value['point'] == '1' ) : ?> 138 <img src="#"> 139 <?php elseif ( $value['point'] == '3' ) : ?> 140 <img src="#"> 141 </td><?php endif; ?> 142 <td><a href ="show_comment.php?post_id=<?= $value['post_id'] ?>">コメント</a></td> 143 </tr> 144 <?php endforeach; ?> 145 </tbody> 146 </table> 147 <!-- ページネーション --> 148 <?php if ( $p > 0 ) : ?> 149 <a href="index.php?search=1&name=<?= $name ?>&shop=<?= $shop ?>&user_id=<?= $user_id ?>&p=<?= $p-1 ?>" class="pull-left">戻る</a> 150 <?php else : ?> 151 <span class="pull-left">最新</span> 152 <?php endif; ?> 153 154 <?php if ( $all['total'] - (PAGE_LIMIT * $p ) > PAGE_LIMIT ) : ?> 155 <a href="index.php?search=1&name=<?= $name ?>&shop=<?= $shop ?>&user_id=<?= $user_id ?>&p=<?= $p+1 ?>" class="pull-right">次へ</a> 156 <?php else : ?> 157 <span class="pull-right">末尾</span> 158 <?php endif; ?> 159 160 <?php else : ?> 161 <p class="alert alert-danger">検索対象は見つかりませんでした。</p> 162 <?php endif; ?> 163 </div> 164 <?php endif; ?> 165 166 </body> 167</html>

投稿2019/03/20 01:35

編集2019/03/22 01:01
mayoi_maimai

総合スコア1583

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

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

ariiiiiga

2019/03/20 04:51

ありがとうございます! Notice: Undefined index: TOTAL in /app/index.php on line 71 このエラーがでるのですがなぜだかわかりますか? if ( $result ) { $all['TOTAL'] = $result[0]['TOTAL']; } 71行目はこの部分です。
mayoi_maimai

2019/03/20 05:24

失礼しました。。 該当部分の上に以下を追加してみてください。 $all = array();
ariiiiiga

2019/03/20 05:52

質問の該当コードを変更したのですが、おっしゃっている通りに出来ていますか? 同じエラーが出てしまいます、、、
mayoi_maimai

2019/03/20 06:00

スマホからなので全角、半角などをチェックしてみてくださいm(_ _)m
ariiiiiga

2019/03/20 06:28

全角チェッカーで確認しましたが問題なさそうです!
mayoi_maimai

2019/03/20 08:14

$result = $sql->fetchAll(); var_dump($result); exit; 上記で何か表示されますか?
ariiiiiga

2019/03/20 09:01

DBのデータが表示されています!
mayoi_maimai

2019/03/20 10:26

その中にTOTALがあると思うので、その値を$all['TOTAL']に入れれば大丈夫だと思います。
mayoi_maimai

2019/03/20 13:47

わからなかったらvar_dump($result);の中身を教えていただけますか?
ariiiiiga

2019/03/20 15:55

array(2) { [0]=> array(12) { ["post_id"]=> int(2) [0]=> int(2) ["name"]=> string(12) "一郎" [1]=> string(12) "一郎" ["shop"]=> string(2) "店舗1" [2]=> string(2) "店舗1" ["point"]=> int(1) [3]=> int(1) ["comment"]=> string(6) "普通" [4]=> string(6) "普通" ["user_id"]=> NULL [5]=> NULL } [1]=> array(12) { ["post_id"]=> int(1) [0]=> int(1) ["name"]=> string(9) "次郎" [1]=> string(9) "次郎" ["shop"]=> string(3) "店舗2" [2]=> string(3) "店舗2" ["point"]=> int(3) [3]=> int(3) ["comment"]=> string(15) "すごくいい" [4]=> string(15) "すごくいい" ["user_id"]=> NULL [5]=> NULL } } 表示結果です!
mayoi_maimai

2019/03/21 07:48 編集

SQL分けたのですね。。。 修正したものを回答に追加しました。
ariiiiiga

2019/03/21 14:55

エラーは消えたのですが、やはり検索結果が表示されません、、、 検索対象は見つかりませんでした。が表示されてしまいます。
ariiiiiga

2019/03/22 03:19

検索した後にこのエラーがでました。 Fatal error: Uncaught PDOException: SQLSTATE[08P01]: <>: 7 ERROR: bind message supplies 0 parameters, but prepared statement "pdo_stmt_00000002" requires 1 in /app/3.php:62 Stack trace: #0 /app/3.php(62): PDO->query('select COUNT(*)...') #1 {main} thrown in /app/3.php on line 62 62行目はこれです。 $totalRow = $pdo->query('select COUNT(*) AS "TOTAL" from hosts '.$whereSql);
mayoi_maimai

2019/03/22 03:52

// 件数取得 $totalRow = $pdo->query('select COUNT(*) AS "TOTAL" from hosts '.$whereSql); if ( $name ) { $totalRow->bindValue(":name", "%" . addcslashes($name, '\_%') . "%", PDO::PARAM_STR); } if ( $shop ) { $totalRow->bindValue(":shop", "%" . addcslashes($shop, '\_%') . "%", PDO::PARAM_STR); } if ( $user_id ) { $totalRow->bindValue(":user_id", addcslashes($user_id, '\_%') , PDO::PARAM_STR); } $totalRow->execute(); $all = $totalRow->fetch(PDO::FETCH_ASSOC);
ariiiiiga

2019/03/22 04:29

質問のコードを変更しましたがおっしゃる通りに出来ていますか? 同じエラーがでてしまいました。
mayoi_maimai

2019/03/22 04:32

失礼しました。。。 以下でどうでしょうか? $totalRow = $pdo->query('select COUNT(*) AS "TOTAL" from hosts '.$whereSql); ↓ $totalRow = $pdo->prepare('select COUNT(*) AS "TOTAL" from hosts '.$whereSql);
ariiiiiga

2019/03/22 04:39

本当にいつもありがとうございます! お陰様で解決できました!
mayoi_maimai

2019/03/22 05:09

今回は見落としが多くて失礼しました。。 きれいなコードではないのでいろいろ見直しながら工夫してみてくださいm(__)m
ariiiiiga

2019/03/22 07:27

いつもありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問