Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/291.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在SQL Select中返回零上的wild_Php_Mysql - Fatal编程技术网

Php 在SQL Select中返回零上的wild

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`

我有一个SQL查询。我使用一个PHP函数来运行它,其中有两个PHP变量。有时其中一个PHP变量将为零,这将不会生成任何结果。有没有一种方法可以调整它,如果该变量为零,它将根据其他条件返回所有记录

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注入攻击的最佳实践。