Php 在SQL Select中返回零上的wild
我有一个SQL查询。我使用一个PHP函数来运行它,其中有两个PHP变量。有时其中一个PHP变量将为零,这将不会生成任何结果。有没有一种方法可以调整它,如果该变量为零,它将根据其他条件返回所有记录Php 在SQL Select中返回零上的wild,php,mysql,Php,Mysql,我有一个SQL查询。我使用一个PHP函数来运行它,其中有两个PHP变量。有时其中一个PHP变量将为零,这将不会生成任何结果。有没有一种方法可以调整它,如果该变量为零,它将根据其他条件返回所有记录 SELECT `author`.name, `author`.id, `category`.name as cat_name FROM `post` INNER JOIN `author`
SELECT
`author`.name,
`author`.id,
`category`.name as cat_name
FROM
`post`
INNER JOIN `author` ON (`author`.id = `post`.author)
INNER JOIN `category` ON (`category`.id = `post`.category_id)
WHERE `author`.site_id='".$site_id."' AND `post`.category_id='".$category_id."'
AND `category`.id <> 0
GROUP BY `post`.author
选择
`作者姓名:,
`作者`.id,
`类别`。名称为类别名称
从…起
`职位`
上的内部联接`author`(`author`.id=`post`.author)
上的内部联接`category`(`category`.id=`post`.category\u id)
其中'author`.site\u id='“$site\u id.”和'post`.category\u id='“$category\u id.”
和“类别”。id 0
按“post”分组。作者
当$category\u id等于零时,我希望返回author.site\u id等于$site\u id的所有记录。您可以执行以下操作:
WHERE (`author`.site_id = '".$site_id."' OR $site_id = 0) AND
(`post`.category_id = '".$category_id."' OR $category_id = 0) AND
`category`.id <> 0
其中(`author`.site\u id='.$site\u id.'或$site\u id=0)和
(`post`.category\u id='.$category\u id.'或$category\u id=0)和
`类别“.id 0”
更典型的是,
NULL
用于缺少的值,而不是0
。同样的想法也适用于NULL
。您只需使用为空
而不是=0
只需在PHP代码中添加和post.category\u id='“$category\u id.”“
仅当$category\u id
不为0时才可使用。将和post.category\u id='“$categegegory\u id.”“
替换为($categegegegory\u id!=0?”和post.categegegory\u id='”。“':”)
SQL语句作为变量$SQL=“statement”。这会改变我需要替换apokryfos的代码吗?我试过了,它确实有效,直到我在没有设置$category_id的页面上试过。当我回显SQL时,它将$category_id的值放在第二行中,我们检查它是否为0。所以你可以得到它以“或382=0”或“或0=0”结尾,当然我遇到的问题是它以“或=0”结尾。有什么办法吗?您可以使用空合并运算符(?
)将其替换为0
。我在$category\u id中加了单引号。这似乎很有效。这会引起什么问题吗?@RichardYoung。仅当值包含单引号时。如果这些值由用户提供或不在您的控制范围内,您应该编写查询以使用参数。这是避免SQL注入攻击的最佳实践。