2

好的,所以我的问题是我有一个函数,但我想在它执行查询时解析它不同的 WHERE 子句。例如:

function query($where)
{
$query = $mysql->prepare("SELECT * FROM table WHERE ?");
$query->bind_param("s", $where);
$query->execute();

...

}

query("table.id=123 AND table.name='abc'");

我知道这是不正确的那么我该如何执行类似的操作,我有很多地方需要使用具有不同 WHERE 子句的函数,并且为每个函数创建一个函数是不切实际的,因此不创建一个函数并直接调用它.

4

2 回答 2

2

对于带有 WHERE 子句的预处理语句,您必须指定稍后将指定的值,例如:

SELECT * FROM table WHERE ID=?

如果你想让它更动态,你可以在一个函数中指定查询,然后调用查询函数。例如,你有这个:

function query($query, $param, $where)
{
$query = $mysql->prepare($query);
$query->bind_param($param, $where);
$query->execute();

...

} 

在您的其他功能中,您说:

$results=query("SELECT * FROM table WHERE Id=?","s","1");

您可以通过创建一个可以包含 where 子句数组的查询类来使其更加复杂:

class query
{
  public $query;
  public $param;
  public $where;
}

$query=new query();
$query->query="SELECT * FROM Table WHERE group=? AND name like ?";
$query->param="ss";
$query->where = array();
$query->where[]="administrators";
$query->where[]="sam";

并将您的查询功能更改为:

function SQLCall(query $query)
{
$db = $mysql->prepare($query->query);
call_user_func_array(array(&$db, 'bind_param'), $where)
$db->execute();

...

}
于 2013-10-14T20:01:15.027 回答
1

if(或者如果您有很多差异,switch)语句中的不同查询:

if($item === 'option1'){
    $query = "SELECT * FROM table WHERE item = ?;";
    $preparedQuery = $mysql->prepare($query);
    $preparedQuery->bind_param("s", $someString);
} elseif($item === 'option2'){
    $query = "SELECT * FROM table WHERE different = ?;";
    $preparedQuery = $mysql->prepare($query);
    $preparedQuery->bind_param("i", $someInteger);
}

$preparedQuery ->execute();

显然过于笼统,但您应该了解总体思路。如果你知道总是有相同数量的值,并且总是相同的类型,你可以简化它:

if($item === 'option1'){
    $query = "SELECT * FROM table WHERE item = ?;";
} elseif($item === 'option2'){
    $query = "SELECT * FROM table WHERE different = ?;";
}

$preparedQuery = $mysql->prepare($query);
$preparedQuery->bind_param("s", $someString);
$preparedQuery->execute();
于 2013-10-14T19:50:22.943 回答