我發現這個http://net.tutsplus.com/tutorials/php/the-problem-with-phps-prepared-statements/PHP/MySQL的:動態準備語句插入/更新查詢
和它的作品真的很好有它在一個單獨的PHP文件,我的其他文件調用與查詢作爲參數。
是否有可能使其他查詢類似插入和更新?
我發現這個http://net.tutsplus.com/tutorials/php/the-problem-with-phps-prepared-statements/PHP/MySQL的:動態準備語句插入/更新查詢
和它的作品真的很好有它在一個單獨的PHP文件,我的其他文件調用與查詢作爲參數。
是否有可能使其他查詢類似插入和更新?
這是更新的例子:
$ params是一個數組。
function insertToDB($params, $db) { //Pass array and db
$fields = array();
$conn = new mysqli('localhost', 'root', 'root', 'db') or die('XXX');
$stmt = $conn->stmt_init();
$stmt->prepare("SELECT * FROM ".$db);
$stmt->execute();
$meta = $stmt->result_metadata();
while ($field = $meta->fetch_field()) {
$fields[] = $field->name;
}
$fields = implode(", ", $fields);
$placeholders = implode(',', array_fill(0, count($params), '?'));
$types = '';
foreach($params as $value) {
$types.= substr(strtolower(gettype($value)), 0, 1);
}
$ins = "INSERT INTO MYDB (".$fields.") VALUES (".$placeholders.")";
$bind_names[] = $types;
for ($i = 0; $i < count($params); $i++) {
$bind_name = 'bind' . $i;
$$bind_name = $params[$i];
$bind_names[] = &$$bind_name;
}
if ($stmt->prepare($ins)) {
call_user_func_array(array($stmt,'bind_param'),$bind_names);
$insresult = $stmt->execute();
}
return $insresult;
$stmt->close();
}
所以我必須執行一個select查詢然後執行插入查詢?我想要一個接受三個參數(兩個數組和一個字符串)的方法,第一個可以是值,然後是列和表名,然後該方法應該從這些值開始準備語句查詢。雖然我弄不清楚怎麼做,但試過一些上面寫的代碼,但我無法工作 – 2012-07-14 20:00:04
@Oskwish,你應該執行第一個查詢來退出表的元數據(把它放在$ fields數組中)然後用$ field數組和$ params(你想要插入的值)構建一個$ ins查詢,用這個方法你可以傳遞第一個參數的值(在這裏是$ params),第二個參數列,你不需要,因爲你通過第一個查詢檢索它,並將其放在$ fields數組中,第三個arg桌子,這個你可以通過喲想要的... – 2012-07-14 20:07:00
是啊,不要介意第一個評論。你的代碼很好,但我不使用select查詢,而是發送列,值和表作爲參數。謝謝你的幫助!可以肯定的是,這是插入數據的安全方式,對吧? – 2012-07-14 20:11:37
簡短回答是肯定的。看看[這裏](http://forum.codecall.net/topic/44392-php-5-mysqli-prepared-statements/) – Zbigniew 2012-07-14 12:40:43
我見過這個教程。它很糟糕(它基於一個錯誤的假設,你不需要將結果綁定到變量上,你可以使用'$ row [「title」]'etc來做任何你想做的事情 – 2012-07-14 14:35:23