3

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

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

当用户填写此字段时,字段值将作为 mysql 参数传递以用于搜索数据库。这里的问题是,如果用户想知道美国的作者列表,他将在国家字段中输入美国并离开其他字段。但这会破坏 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; }

请帮我传递可选参数。

谢谢..

4

3 回答 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);
 }

并确保在传递给函数之前已经对这些变量进行了转义。

于 2012-09-26T11:18:52.880 回答
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子句一样。

于 2012-09-26T11:15:09.443 回答
0

功能应该是这样的

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

当您不将值传递给函数时,默认值即将到来。

于 2012-09-26T11:16:08.450 回答