簡體   English   中英

如何將此 PDO 代碼轉換為 MySQLi?

[英]How do I convert this PDO code to MySQLi?

我對 PHP 和 MySQL 很陌生,我嘗試學習如何將代碼從 PDO 更改為 MySQLi。 它是關於記住我的功能,帶有我在網上找到的登錄系統的安全令牌和標識符。 我想學習和了解如何將代碼從 PDO 更改為 MySQLi。 我知道在 MySQLi 中有一個語句創建和准備,我也必須綁定參數並執行。 但在這種情況下,我無論如何都不知道如何開始。

$pdo = new PDO('mysql:host=localhost;dbname=dbname', 'root', '');
if (!isset($_SESSION['id']) && isset($_COOKIE['identifier']) &&
isset($_COOKIE['securitytoken'])) {
    $identifier = $_COOKIE['identifier'];
    $securitytoken = $_COOKIE['securitytoken'];

    $statement = $pdo->prepare("SELECT * FROM securitytokens WHERE identifier = ?");
    $result = $statement->execute(array($identifier));
    $securitytoken_row = $statement->fetch();

    if (sha1($securitytoken) !== $securitytoken_row['securitytoken']) {
        die('Maybe a stolen securitytoken.');
    } else {
        //Token was correct
        //Set an new token
        $neuer_securitytoken = random_string();
        $insert = $pdo->prepare("UPDATE securitytokens SET securitytoken = :securitytoken WHERE identifier = :identifier");
        $insert->execute(array('securitytoken' => sha1($neuer_securitytoken), 'identifier' => $identifier));
        setcookie("identifier", $identifier, time() + (3600 * 24 * 365)); //1 Year valid
        setcookie("securitytoken", $neuer_securitytoken, time() + (3600 * 24 * 365)); //1 Year valid

        //Loggin the user
        $_SESSION['id'] = $securitytoken_row['id'];
    }
}

不要這樣做! PDO 更簡單並提供更多功能。

如果您只想學習 MySQLi,那么您應該記住以下幾點:

  1. 這是您正確打開連接的方式:

     mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT); $mysqli = new mysqli($host, $user, $pass, $db); $mysqli->set_charset($charset);
  2. MySQLi 中沒有執行中的綁定。 事實上,根本沒有價值綁定! 您只能通過引用綁定,並且必須指定值的類型。

     $statement = $mysqli->prepare("SELECT * FROM securitytokens WHERE identifier = ?"); $statement->bind_param('i', $identifier); // i for integer; s for string. $statement->execute();
  3. MySQLi 沒有命名占位符,所以你只需要使用位置占位符。

     $insert = $mysqli->prepare("UPDATE securitytokens SET securitytoken = ? WHERE identifier = ?"); $sha1ResultDueToPassByRef = sha1($neuer_securitytoken); $insert->bind_param('si', $sha1ResultDueToPassByRef, $identifier); $insert->execute();
  4. MySQLi 中的fetch方法完全不同,它返回布爾值。 要獲得與PDO 的fetch()相同的結果,您需要get_result()然后使用fetch_array()fetch_assoc()

     $securitytoken_row = $statement->get_result()->fetch_array();

暫無
暫無

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

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