php - laravel打印sql - laravel数据库查询
使用动态WHERE子句准备语句 (2)
这个问题在这里已经有了答案:
- 如何创建一个动态的WHERE子句[复制] 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子句的这个函数,并为每个功能,是不切实际的,所以不直接调用它的函数。
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();
对于使用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();
...
}