0
我想爲PHP做一個mysql查詢包裝函數,現在我正在嘗試使用預準備語句,因爲它們顯然是最好的方法在SQL查詢的MySQL,到目前爲止,這是我所有沒有辦法讓bind_param接受可變數量的參數
public function run_query($query)
{
$arguments = $query['arguments'];
$prep = $this->connection->prepare($query['query'])
$dtString = '';
foreach($arguments as $_field => $_argument)
{
$dtString .= array_keys($_argument);
}
}
的$query
結構是這樣
$query = array("query" => QUERY,
"arguments" => array(FIELD => array(DATATYPE => VALUE)))
和榜樣的什麼$query
可能是這個
$query = array("query" => "SELECT * FROM table_1 WHERE active = ? AND group = ?",
"arguments" => array("active" => array("i" => 1),
"group" => array("i" => 17)))
現在你可以看到,我正在試圖做的是讓我的函數允許任何查詢,而不管查詢是什麼以及要使用多少個參數。
現在在我的功能,以後每個接下來的步驟是使用$prep->bind_param($dtString, [VALUES]);
但是我讀了每個值就是有點弄亂的東西了
我不知道是否有一個功能的單獨的參數辦法讓bind_param
在我的函數接受可變數量的參數
我目前的解決方案是創建另一個函數,在傳遞$參數作爲參數傳遞給函數,將我的每一個到新的功能和創建$dtString
後計算它的大小,並有一個只有多個bind_param
但具有不同數量的參數的開關盒就像這個
switch($count)
{
case 1:
$prep->bind_param($dtString, $array[0]);
break;
case 2:
$prep->bind_param($dtString, $array[0], $array[1]);
break;
case 3:
$prep->bind_param($dtString, $array[0], $array[1], $array[2]);
break;
}
,但我寧願避免這樣
不,你不能避免那個爛攤子。不要忘記,您也將獲得類似的娛樂獲取查詢結果。所以,最好轉到PDO,直到太遲 –
@YourCommonSense是否有任何缺點使用PDO在MySQLi上準備好的語句? –
當然可以。如果你更喜歡冗長,複雜和臃腫的代碼,轉向PDO將是一個痛苦。 –