带有可选参数的PHP MySQL函数

3

我需要帮助,为php函数提供可选参数,该函数将在MySQL数据库中搜索匹配的标准。

情景:前端 = 有6个html输入表单字段,名称为authorName、authorCountry、authorState等

当用户填写这些字段时,字段值将作为mysql参数传递以搜索数据库。问题是,如果用户想知道美国的作者列表,他会在国家字段中输入USA并留下其他字段。但这会破坏mysql查询,因为其他字段为空。

我试过了,但对我没用。

function getAuth(authName=NULL, authCoun=NULL, authSate=NULL) {
$query = mysql_query("SELECT * FROM authTable WHERE authName='authName'
AND authCoun='authCoun' AND authSate='authSate'");
return $query; }

请帮我传递可选参数。

谢谢。

3个回答

7
function getAuth($authName=NULL, $authCoun=NULL, $authSate=NULL) {
    $sql = "SELECT * FROM authTable WHERE 1 = 1";
    if ($authName) {
        $sql .= " AND authName='$authName'";
    }
     if ($authCoun) {
        $sql .= " AND authCoun='$authCoun'";
    }
     if ($authSate) {
        $sql .= " AND authSate='$authSate'";
    }
    return mysql_query($sql);
 }

确保在将这些变量传递给函数之前进行转义。


5
这样做: ```

这样做:

```
SELECT * 
FROM authTable 
WHERE 1 = 1
  AND (@authName IS NULL OR authName = @authNameParam)
  AND (@authCoun IS NULL OR authCoun = @authCounParam)
  AND (@authSate IS NULL OR authSate = @authSateParam)
 ...

即使没有任何参数传递给此查询,也不会破坏此查询,即在这种情况下将所有内容都传递为NULL值,则整个WHERE子句将变为WHERE 1 = 1,其作用类似于SELECT * FROM authtable,就像没有WHERE子句一样。


2
我们真的需要 1 = 1 吗?看起来好像不需要这个条件也能运行。 - alexkorep

0

函数应该是这样的

function getAuth(authName=NULL, authCoun="Default value", authSate="Default value") {}

当你不向函数传递值时,默认值会被使用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接