

こんにちは。現在PHPを独学で学習しています。  
現在、データベースにある情報を複数の条件で検索したいのですが、検索結果が表示されません。

具体的に、htmlは表示されますが、検索結果（データベースに入っている情報）が表示されません。

表示されないのは何故なのか、もしお分かりの方がいましたら、ご教授ください。

  1. SQLが発行できていない
  2. データベースに接続できていない。
  3. その他

もしくは、現在のコードをベースに、複数検索できるコードがありましたら、教えて頂けますでしょうか。

**現在のコード**

[code]

    <form method="post" action="searchtest.php">
    <div class="studentinfo">
    
    <p>顧客番号：   <input type="text" name="id"></p>
    <p>担当者：     <input type="text" name="Staff_Name"></p>
    <p>ステータス： <input type="text" name="Status"></p>
    </div>
    
    <div class="Schoolinfo">
    <p>名前：          <input type="text" name="Name"></p>
    <p>キャンパス：    <input type="text" name="Campus" ></p>
    <p>コース開始日：  <input type="date" name="Start_Date" ></p>
    </div>
    <div>
    <input type="submit" value="検索する">
    </form>
    
[/code]

**searchtest.php**

[code]

    <?php
    
    $search    =filter_input(INPUT_POST,'search');
    $id        =filter_input(INPUT_POST,'id');
    $Staff_Name=filter_input(INPUT_POST,'Staff_Name');
    $Status    =filter_input(INPUT_POST,'Status');
    $Name      =filter_input(INPUT_POST,'Name');
    $Campus    =filter_input(INPUT_POST,'Campus');
    $Start_Date=filter_input(INPUT_POST,'Start_Date');
    
    if(!is_null($search)){
      $sql ="SELECT * FROM studentinfo WHERE 1 ";
      $data=[];
    
      if(!is_null($id)){
        $sql.="AND id=? ";
        $data[]=$id;
      }
      if(!is_null($Staff_Name)){
        $sql.="AND Staff_Name LIKE ? ";
        $data[]="%".$Staff_Name."%";
      }
      if(!is_null($Status)){
        $sql.="AND Status=? ";
        $data[]=$Status;
      }
      if(!is_null($Campus)){
        $sql.="AND Campus LIKE ? ";
        $data[]="%".$Campus."%";
      }
      if(!is_null($Name)){
        $sql.="AND Name LIKE ? ";
        $data[]="%".$Name."%";
      }
      if(!is_null($Start_Date)){
        $sql.="AND Start_Date=? ";
        $data[]=$Start_Date;
      }
      if(count($data)==0) $sql.="AND 0 ";
    
      $stmt = $pdo->prepare($sql);
      $stmt->execute($data);
    }
    ?>
    
[/code]

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


CC BY-SA 4.0
2019-07-24T15:43:13.100
56867
2021-06-19T14:02:35.257
2019-07-24T16:17:53.427
3060
35237
question
php mysql
PHP 複数条件の検索について


SQLクエリを投げる前に **予めDBに接続する必要**
がありますが、提示されたコード内にはDBに関する情報が何もありませんので、まずは正しい手順を確認してください。

* * *

PDOインスタンスの作成例

[code]

    // $dns = 'mysqld:dbname=データベース名;host=ホスト名';
    // dns(Database Source Name)
    $dns = 'mysqld:dbname=myapp;host=localhost';
    $usre = 'root';
    $password = '';
    $con = new PDO($dns, $user, $password);
    
    // DBとの接続を行ったあとでクエリを実行する
    
    $con->prepare('SQL文');
    
[/code]

参考：  
[【PHP・PDO】データベースに接続する方法](https://se-
tomo.com/2018/12/26/%E3%80%90php%E3%83%BBpdo%E3%80%91%E3%83%87%E3%83%BC%E3%82%BF%E3%83%99%E3%83%BC%E3%82%B9%E3%81%AB%E6%8E%A5%E7%B6%9A%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/)


CC BY-SA 4.0
2019-07-24T16:23:34.080
56868
2019-07-24T16:23:34.080
3060
56867
answer

[code]

    $stmt->execute($data);
    
[/code]

でexecuteした後、何もしてないですね。

[code]

    while($result = $stmt->fetch(PDO::FETCH_ASSOC)){
        // ここでresultに1列のデータが取れます
    }
    
[/code]

のように、データを受け取りましょう。

ただ、最近はRDB周りはフレームワークで専用のモジュールを使うので、  
実務だとあまりPDOStatement自体使わないと思います。

また、このような質問がstackoverflowに上がることに疑問があります。  
教材はちゃんとしたものを使っていますか？見直したほうがいい気がします。  
Webで勉強できるからと思わず、ちゃんと本なりprogate使ったりしたほうが効率がいいですよ。

ちゃんとした教材であれば

[code]

    $stmt = $pdo->prepare($selectQuery);
    $stmt->execute($data);
    while($result = $stmt->fetch(PDO::FETCH_ASSOC)){
    }
    
[/code]

はセットで出てくるはずです。


CC BY-SA 4.0
2019-08-07T04:50:16.167
57212
2019-08-07T04:50:16.167
35356
56867
answer