【发布时间】: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” 我知道它会非常不雅