[英]A better way to do this?
這是我當前的代碼:
function addPage($uniquename, $ordernum, $title, $author, $content, $privilege, $description=NULL, $keywords=NULL){
if (!$description) $description = NULL;
if (!$keywords) $keywords = NULL;
//UPDATE `table` SET `ordernum` = `ordernum` + 1 WHERE `ordernum` >= 2
$query = "UPDATE ".$this->prefix."page SET ordernum = ordernum+1 WHERE ordernum >= ?";
if ($stmt = $this->db->prepare($query)){
$stmt->bind_param("i", $ordernum);
$stmt->execute();
if (!arCheck($stmt)) return false;
} else {
$this->stmtError("addPage", $stmt->error);
}
$query = "INSERT INTO ".$this->prefix."page VALUES (LCASE(?), ?, ?, ?, ?, ?, ?, ?)";
if ($stmt = $this->db->prepare($query)){
$stmt->bind_param("sisisssi", $uniquename, $ordernum, $title, $author, $content, $description, $keywords, $privilege);
$stmt->execute();
return arCheck($stmt);
} else {
$this->stmtError("addPage", $stmt->error);
}
}
假定向數據表添加一個新頁。 MySQL由來自Store的 Phil Hunt提供
我知道您可以使用多查詢來完成相同的事情,但是有人告訴我,准備好的語句在性能和安全性方面更好。 還有另一種方法嗎? 像准備好的多重查詢一樣?
此外,如何進行交易? 我不確定這是什么,我假設這是說,如果INSERT語句失敗,那么它也會撤消UPDATE語句嗎?
注意:arCheck函數將關閉該語句。
至少在大多數情況下,對於重復查詢而言,預備語句的確確實更快。 它們也更安全,因為它們會自動轉義輸入值,從而防止SQL注入攻擊。 如果要在PHP中使用它們,則需要MySQLi擴展 。
您似乎對交易有正確的想法。 使用MySQLi,有commit
和rollback
方法,否則可以使用mysql_query("COMMIT")
或mysql_query("ROLLBACK")
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.