php mysqli使用通配符准备语句

时间:2011-05-18 07:07:59

标签: php mysql prepared-statement

我正在尝试构建这个准备好的声明:

$sql = "SELECT * FROM entries WHERE";
$sql .= " title LIKE ? OR title LIKE ? OR title LIKE ? OR title LIKE ?";
$sql .= " OR content LIKE ? OR content LIKE ? OR content LIKE ? OR content LIKE ?";

$q = $this->db->prepare($sql);

$one = $this->term;
$two = "%" . $this->term;
$three = $this->term . "%";
$four = "%" . $this->term . "%";

$q->bind_param("ssssssss", $one, $two, $three, $four, $one, $two, $three, $four);
$q->execute();

$ this-> db是我的mysqli连接对象

$ this-> term是用户提供的字符串。

我没有从数据库中收到任何类型的错误。我知道sql语句有效,我使用$ this-> db-> query()运行它并且它很好。当我用准备好的语句运行它时,它返回没有结果。有什么建议吗?

2 个答案:

答案 0 :(得分:1)

要在预准备语句中使用通配符,您需要在sql语句中使用CONCAT。数据库将负责将百分号连接到您的搜索词。

假设您在搜索词的开头或结尾需要通配符,那么您的sql应如下所示:

$sql = "SELECT * FROM entries WHERE title LIKE CONCAT('%', ?, '%') OR content LIKE CONCAT('%', ?, '%')";

答案 1 :(得分:0)

我无法使用准备好的声明。我转到mysqli-> query()并转义用户字符串。卡洛斯,感谢您帮我解决问题。