php mysql函数带有可选参数

sra*_*vis 3 php mysql

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

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

当用户填写此字段时,字段值将作为mysql参数传递以搜索db.这里的问题是,如果用户想知道美国的作者名单,他将在国家/地区进入美国并离开其他领域.但这会破坏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; }
Run Code Online (Sandbox Code Playgroud)

请帮我传递可选参数.

谢谢..

xda*_*azz 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);
 }
Run Code Online (Sandbox Code Playgroud)

并确保在传递给函数之前将这些变量转义.


Mah*_*mal 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)
 ...
Run Code Online (Sandbox Code Playgroud)

即使没有任何参数传递给此查询,此查询也不会中断,即NULL在这种情况下传递all 值,整个WHERE子句将变为WHERE 1 = 1行为,就好像SELECT * FROM authtable没有WHERE子句一样.

  • 我们真的需要`1 = 1`吗?看起来它应该没有这个条件. (2认同)