Так что это мой текущий код:Лучший способ сделать это?
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);
}
}
Это, предполагают, чтобы добавить новую страницу в DataTable. MySQL любезно предоставлен Филом Хантом от Store the order of something in MySQL
Я знаю, что вы можете использовать multiquery для выполнения того же самого, однако мне сказали, что подготовленный оператор лучше работает и обеспечивает безопасность. Есть ли другой способ сделать это? Как подготовленный многопроцессорный запрос?
Также, что делать с транзакциями? Я не совсем уверен в этом, я полагаю, что если, скажем так, заявление INSERT терпит неудачу, оно также отменяет утверждение UPDATE?
ПРИМЕЧАНИЕ. Функция arCheck закроет инструкцию.
Когда вашим функциям требуется больше, чем скажем от 3 до 5 параметров, он учитывает запах кода. Возможно, вы захотите использовать массив для всех элементов контента. Другим запахом кода является непоследовательное использование фигурных скобок. Я бы посоветовал всегда их использовать. – markus