【发布时间】:2013-07-24 22:35:50
【问题描述】:
我目前有一个只有两个元素的小型搜索表单:一个名为search 的文本输入和一个名为param 的“选择”框。在该框中选择的选项应用作参数来选择要获取我的数据库中的哪个表列。
使用mysql_ 函数,可以做到这样的事情:
$param = $_POST['param' ];
$search = $_POST['search'];
$query = 'SELECT * FROM table WHERE $param LIKE "%$search%"';
但我无法让它与mysqli_ 语法一起使用。我正在尝试使用准备好的语句,但到目前为止我做得最好的是:
$param = $_POST['param' ];
$search = $_POST['search'];
if($param == 'first_name')
{
if($prep = $link->prepare('SELECT * FROM table
WHERE first_name
LIKE CONCAT("%", ?, "%")'))
{
$prep->bind_param('s', $search);
$prep->execute();
$prep->bind_result($first_name, $last_name);
while($prep->fetch())
echo $first_name . ' ' . $last_name;
$prep->close();
}
else
echo 'Error while preparing statement.';
}
else if($param == 'last_name')
{
...
}
但是仅仅使用一堆else ifs 似乎很重复并且没有效率,特别是如果我有很多列要处理。
我尝试的第一件事是参数绑定 - ... WHERE ? LIKE ... 和 $prep->bind_param('ss', $param, $search) - 但没有成功(我仍然不知道为什么)。
有没有更智能的方法?
【问题讨论】:
-
+1 可以很好地格式化您的问题
-
....WHERE ".$param." LIKE....一般我用 sql 语句做什么
-
据我所知,列名不能使用占位符,这就是它不起作用的原因。
-
将
bind_param('s', $search)更改为bind_param('s', "%$search%")并将查询更改为SELECT * FROM table WHERE first_name LIKE ?另请参阅 user4035 的回答如何为有效列名创建数组 -
@JohnV.: 他在哪里用的?
标签: php binding parameters mysqli where