1

我花了很多时间研究如何做到这一点,但就是无法让它发挥作用:(

我有一个简单的“联系人” MySQL 数据库,其中包含一些记录的表 ( id, first_name, last_name, )。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

您需要实施白名单以从允许的字段中进行选择。
另请注意,必须使用 GET 方法而不是 POST 来实现搜索

$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 回答