php - Mysql WHERE 子句中的多个参数导致问题
问题描述
我在 php 中有一个从数据库中提取新闻文章的查询,当每个 WHERE 子句独立应用时,它工作正常。
示例 #1
//retrieve all news articles
$sql = 'SELECT post.id, post.headline_en, post.story_en, post.post_stat, post.trans_stat, post.translate, post.published_by,
post.publish_on, system_users.u_username, system_users.u_firstname, system_users.u_lastname
FROM post INNER JOIN system_users ON post.published_by=system_users.u_userid';
// If search terms have been provided...
if($_POST['query'] != '')
{
$sql .= ' WHERE (headline_en LIKE "%'.str_replace(' ', '%', $_POST['query']).'%" OR post.story_en LIKE "%'.str_replace(' ', '%', $_POST['query']).'%")';
}
$sql .= ' ORDER BY post.publish_on DESC';
这似乎工作正常,并根据 $_POST['query'] 中提供的搜索值限制结果。
示例 #1
//retrieve all news articles
$sql = 'SELECT post.id, post.headline_en, post.story_en, post.post_stat, post.trans_stat, post.translate, post.published_by,
post.publish_on, system_users.u_username, system_users.u_firstname, system_users.u_lastname
FROM post INNER JOIN system_users ON post.published_by=system_users.u_userid
WHERE (post.post_stat=3 AND post.trans_stat=3) OR (post.post_stat=3 AND post.translate=0)';
// search option removed
$sql .= ' ORDER BY post.publish_on DESC';
这也可以正常工作,并将结果限制为 WHERE 子句中指定的条件。
但是,当我尝试将两者结合起来时,它不想玩得很好,我不确定为什么。
示例#3
//retrieve all news articles
$sql = 'SELECT post.id, post.headline_en, post.story_en, post.post_stat, post.trans_stat, post.translate, post.published_by,
post.publish_on, system_users.u_username, system_users.u_firstname, system_users.u_lastname
FROM post INNER JOIN system_users ON post.published_by=system_users.u_userid
WHERE (post.post_stat=3 AND post.trans_stat=3) OR (post.post_stat=3 AND post.translate=0)';
//If search terms have been provided...
if($_POST['query'] != '')
{
$sql .= ' AND (headline_en LIKE "%'.str_replace(' ', '%', $_POST['query']).'%" OR post.story_en LIKE "%'.str_replace(' ', '%', $_POST['query']).'%")';
}
$sql .= ' ORDER BY post.publish_on DESC';
^^ 不起作用。我已经尝试了上述的各种排列,对于我的生活,我看不出有什么问题。一如既往的任何反馈将不胜感激。
解决方案
看来我应该看得更近一点:/
我花了很多时间将 WHERE 子句的部分括起来,以至于我将其范围缩小到无法返回任何值,因为无法满足所有条件......
下面的工作代码:
//retrieve all news articles
$sql = 'SELECT post.id, post.headline_en, post.story_en, post.post_stat, post.trans_stat, post.translate, post.published_by,
post.publish_on, system_users.u_username, system_users.u_firstname, system_users.u_lastname
FROM post INNER JOIN system_users ON post.published_by=system_users.u_userid
WHERE (post.post_stat=3 AND post.trans_stat=3 OR post.post_stat=3 AND post.translate=0)';
//If search terms have been provided...
if($_POST['query'] != '')
{
$sql .= ' AND (headline_en LIKE "%'.str_replace(' ', '%', $_POST['query']).'%" OR post.story_en LIKE "%'.str_replace(' ', '%', $_POST['query']).'%")';
}
$sql .= ' ORDER BY post.publish_on DESC';
推荐阅读
- python - Pandas 将零替换为最接近的平均非零值
- c# - 如何让 plugin.dll 调用核心应用程序的功能?
- apache-kafka - 有时无法更新生产者和消费者的 kafka 偏移量
- php - 启用时带有 Composer 自动更新的 Wordpress 插件
- webpack - 将 webpack 从版本 3 升级到 4 后,出现“[vue-router] 路径导航期间未捕获的错误”
- python - 如何修复 ItemManager 和 ItemValidator 类之间的双向依赖关系?
- java - 使用 Rest 高级客户端在 Elastic Search 中检索或插入数据时发生 SocketTimeoutException
- javascript - 如何将 html、js 和 css 捆绑在一个 .js 文件中?
- spring - 许多边缘。无效的令牌发行者
- gremlin - JanusGraph graphTraversalSource.next() 抛出 java.util.NoSuchElementException