Donc ceci est mon code actuel:Une meilleure façon de le faire?
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);
}
}
Il est supposé ajouter une nouvelle page à datatable. Le MySQL est une gracieuseté de Phil Hunt de Store the order of something in MySQL
Je sais que vous pouvez utiliser la requête multiple pour accomplir la même chose, mais on m'a dit que l'instruction préparée est meilleure en termes de performance et de sécurité. Y a-t-il une autre façon de faire cela? Comme une requête multi préparée?
En outre, que diriez-vous de faire des transactions? Je ne suis pas tout à fait sûr de ce que c'est, je suppose que c'est si, disons, l'instruction INSERT échoue, il annulera également l'instruction UPDATE?
REMARQUE: la fonction arCheck ferme l'instruction.
Lorsque vos fonctions ont besoin de plus de 3 à 5 params, c'est une odeur de code. Vous pouvez utiliser un tableau pour tous les éléments de contenu différents. Une autre odeur de code est l'utilisation incohérente des accolades. Je conseillerais de toujours les utiliser. – markus