對於您必須指定一個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();
...
}
如果這個子句是完全任意的,爲什麼不自己清理輸入並執行'$ mysql-> prepare(「SELECT * FROM table WHERE $ where」);'? –
有太多的東西可能會導致您自己的SQL輸入消毒過程出錯。使用像prepare這樣的內置函數是安全和簡單的 – Snowburnt