这没有意义..我正在尝试根据URL参数的值对帖子进行排序,但我的elseif语句不起作用。
这是一个向查询添加另一个WHERE子句的函数。没有MYSQL错误我只是声明有问题。
function sort_where($where)
{
if (isset($_GET['sort'])) {
$sort = $_GET['sort'];
if ($sort = "up") {
$where .= " AND $sort > 1";
}
elseif ($sort = "down") {
$where .= " AND $sort > 1";
}
}
return $where;
}
查询最终看起来像这样
$query = "SELECT * FROM posts WHERE something = $something AND $sort > 1";
if语句有效,elseif被忽略。如果if语句中有up > 1
,我会收到$sort = down
的帖子,反之亦然,反之亦然。
答案 0 :(得分:5)
实际上,两个内部ifs都没有正常工作。
您需要使用==
而不是=
。一个等号表示赋值,如果赋值为truthy值,则它总是在if条件下求值为true。这就是为什么你的elseif似乎永远不会发生的原因。
您可能还需要修复WHERE
条款,它们对我没有意义(您正在排序,但与up
列和down
列进行比较?) 。或许这就是你设计你的桌子的方式......
根据您的评论,尝试以下SQL WHERE
子句,看看您是否收到了正确的帖子:
if ($sort == "up") {
$where .= " AND up > down";
}
elseif ($sort == "down") {
$where .= " AND down > up";
}
答案 1 :(得分:1)
Single =表示变量1 =变量2
Double ==表示比较
此外,如果您要使用此代码,请确保将mysql_real_escape_string()放在$ _GET语句周围或任何具有用户输入的内容或人们将能够使用sql注入。
E.g。 mysql_real_escape_string($ _ GET ['sort'])如果您多次使用它,请确保使用变量
这是更正后的代码;)
function sort_where($where)
{
if (isset($_GET['sort'])) {
$sort = $_GET['sort'];
if ($sort == "up") {
$where .= " AND $sort > 1";
}
elseif ($sort == "down") {
$where .= " AND $sort > 1";
}
}
return $where;
}
答案 2 :(得分:0)
if ($sort = "up")
elseif ($sort = "down")
应该是
if ($sort == "up")
elseif ($sort == "down")
答案 3 :(得分:0)
两个问题:
if ($sort = "up") {
=
是赋值运算符。如果要测试是否相等,则需要在此使用==
。
此外,两个条件的正文:
if ($sort = "up") {
$where .= " AND $sort > 1";
}
elseif ($sort = "down") {
$where .= " AND $sort > 1";
}
相同。我不认为你的意思是在查询中附加相同的基本字符串,对吗? (在任何一种情况下,授予$sort
都会有所不同,但为什么不只是硬编码字符串,如果这就是你的意思。这只是读起来很混乱,而且很难准确说出你的意图。)