1

これを行う方法を調査するのにかなりの時間を費やしましたが、機能させることができません:(

いくつかのレコードを含むテーブル ( idfirst_name、 )last_nameでセットアップされた単純な「連絡先」MySQL データベースがあります。email

ユーザーが検索語句を選択できるようにしたいと考えています。たとえば、' first_name' 列で特定の名前を検索したり、' last_name' 列で検索したりします。

ユーザーデータをスクリプトに送信する単純な HTML フォームがあります。

とにかく、私のPHPスクリプトを以下に示します。PHP スクリプトを実行しても、エラーは発生しません。何も発生しないだけです。何も起こりません。

ご協力いただけると幸いです。

<?php
try{
    $conn = new PDO('mysql:host=localhost; dbname=mydbname', 'user',   'pass');

}catch (PDOException $e){
    echo "Cannot connect to database";
    exit;
}

  $sql = 'SELECT first_name, last_name, email FROM mycontacts WHERE :searchtype LIKE   :searchterm';
  $searchtype = '%'. $_POST['searchtype'] .'%';
  $searchterm = '%'. $_POST['searchterm'] .'%';
  $stmt = $conn->prepare($sql);
  $stmt->bindParam(':searchtype', $searchtype, PDO::PARAM_STR);
  $stmt->bindParam(':searchterm', $searchterm, PDO::PARAM_STR);
  $stmt->bindColumn(1, $first_name);
  $stmt->bindColumn(2, $last_name);
  $stmt->bindColumn(3, $email);

   $stmt->execute();
  $numRows = $stmt->rowCount();

  echo "<p>Number of rows:".$numRows."</p>";

  if (isset($numRows)) { ?>
  <table>
  <tr>
  <th scope="col">First Name</th>
  <th scope="col">Last Name</th>
  <th scope="col">Email</th>
  </tr>
  <?php while ($stmt->fetch()) { ?>
  <tr>
   <td><?php echo $first_name; ?></td>
   <td><?php echo $last_name; ?></td>
   <td><?php echo $email; ?></td>
   </tr>
   <?php } ?>
   </table>
   <?php } ?>
4

1 に答える 1

3

許可されたフィールドから選択するには、ホワイトリストを実装する必要があります。
また、検索はPOSTではなくGETメソッドを使用して実装する必要があることに注意してください

$terms = array("last_name","first_name","etc");
if (in_array($_GET['searchtype'], $terms) {
    $field = $_GET['searchtype'];
}
$sql = "SELECT * FROM mycontacts WHERE `$field` LIKE :searchterm";
于 2013-01-21T09:34:06.410 に答える