天天看點

mysql bind_param_如何在PHP中動态綁定mysqli bind_param參數?

我一直在學習為我的sql查詢使用準備和綁定的語句,我已經出來了這個到目前為止,它的工作正常,但它是不是動态的,當涉及到多個參數或沒有任何參數需要時,

public function get_result($sql,$parameter)

{

# create a prepared statement

$stmt = $this->mysqli->prepare($sql);

# bind parameters for markers

# but this is not dynamic enough...

$stmt->bind_param("s", $parameter);

# execute query

$stmt->execute();

# these lines of code below return one dimentional array, similar to mysqli::fetch_assoc()

$meta = $stmt->result_metadata();

while ($field = $meta->fetch_field()) {

$var = $field->name;

$$var = null;

$parameters[$field->name] = &$$var;

}

call_user_func_array(array($stmt, 'bind_result'), $parameters);

while($stmt->fetch())

{

return $parameters;

//print_r($parameters);

}

# close statement

$stmt->close();

}

這就是我如何調用對象類,

$mysqli = new database(DB_HOST,DB_USER,DB_PASS,DB_NAME);

$output = new search($mysqli);

有時我不需要傳遞任何參數,

$sql = "

SELECT *

FROM root_contacts_cfm

";

print_r($output->get_result($sql));

有時我隻需要一個參數,

$sql = "

SELECT *

FROM root_contacts_cfm

WHERE root_contacts_cfm.cnt_id = ?

ORDER BY cnt_id DESC

";

print_r($output->get_result($sql,'1'));

有時我隻需要一個以上的參數,

$sql = "

SELECT *

FROM root_contacts_cfm

WHERE root_contacts_cfm.cnt_id = ?

AND root_contacts_cfm.cnt_firstname = ?

ORDER BY cnt_id DESC

";

print_r($output->get_result($sql,'1','Tk'));

是以我相信這一行對于上面的動态任務來說并不足夠,

$stmt->bind_param("s", $parameter);

要動态建構一個bind_param,我已經在其他文章上發現了這一點.

call_user_func_array(array(&$stmt, 'bind_params'), $array_of_params);

而我試圖修改一些代碼從php.net,但我無處不在,

if (strnatcmp(phpversion(),'5.3') >= 0) //Reference is required for PHP 5.3+

{

$refs = array();

foreach($arr as $key => $value)

$array_of_param[$key] = &$arr[$key];

call_user_func_array(array(&$stmt, 'bind_params'), $array_of_params);

}

為什麼??有什麼想法我可以使它工作嗎?

或者也許有更好的解決方案?

謝謝.