【问题标题】:Searching using PDO使用 PDO 搜索
【发布时间】:2014-05-24 18:39:59
【问题描述】:

所以我正在尝试使用 PDO 执行搜索。我已经设置了这个搜索:

echo "<form action = 'user.php?search=yes' method = 'post' id='searchform'>
<a href='user.php?newuser=yes'>Add New User</a> || Search By
<select name = 'paramet' form = 'searchform'>
<option value = 'userID'>User ID</option>
<option value = 'firstname'>First Name</option>
<option value = 'lastname'>Last Name</option>
<option value = 'email'>E-Mail</option>
<option value = 'mobileno'>Mobile Number</option>
<option value = 'homeno'>Home Number</option>
</select>
<select name = 'howso' form = 'searchform'>
<option value = 'contains'>which contains</option>
<option value = 'equalto'>which is equal to</option>
</select>
<input type = 'text' name='criteria' required>
<input type = 'submit' value='Search'>
</form>

然后这个处理查询:

{
$param = $_POST['paramet'];
$how = $_POST['howso'];
$crite = $_POST['criteria'];
if($how == 'contains')
{
$query = $hsdbc->prepare("SELECT * FROM user WHERE :param LIKE :crite");
$query->bindParam(':param', $param);
$query->bindValue(':crite', '%' . $crite . '%');
$query->execute();
}
else{
$query = $hsdbc->prepare("SELECT * FROM user WHERE :param = :crite");
$query->bindParam(':param', $param);
$query->bindParam(':crite', $crite);
$query->execute();
}

我没有得到正确的结果。有什么帮助吗?

【问题讨论】:

  • 占位符只能表示值,不能表示字段/表名。您必须手动插入相关字段名称,并警惕SQL injection attack 漏洞。
  • 嗯。如果我的列数有限,是否可以通过一系列 if 语句来完成?即如果 $param = 'firstname' 那么查询将是“SELECT * FROM user WHERE firstname = :crite” 我知道它会非常不雅

标签: php mysql search pdo


【解决方案1】:

您不能绑定列名。您可以做的最好的事情是将名称添加到白名单数组或其他东西并手动插入。

   if(in_array($param, $good_params_array)) {
         $query = $hsdbc->prepare("SELECT * FROM user WHERE $param LIKE :crite");
         $query->bindValue(':crite', '%' . $crite . '%');
         $query->execute();
   }

我看到人们查询数据库以获取表描述以获取列以查看是否列出了列名,但这需要添加数据库请求。此外,您可能希望限制他们可以搜索的字段

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-07-12
    • 1970-01-01
    • 2014-11-07
    • 2011-03-21
    • 1970-01-01
    • 1970-01-01
    • 2015-11-03
    • 2012-12-02
    相关资源
    最近更新 更多