簡體   English   中英

更好的方法呢?

[英]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,有commitrollback方法,否則可以使用mysql_query("COMMIT")mysql_query("ROLLBACK")

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM