溫馨提示×

php mysqli函數(shù)的高級用法示例

PHP
小樊
82
2024-09-26 22:15:32
欄目: 云計算

以下是PHP的MySQLi函數(shù)的一些高級用法示例:

  1. 預處理語句和參數(shù)綁定
$mysqli = new mysqli("localhost", "user", "password", "database");

// 檢查連接
if ($mysqli->connect_error) {
    die("連接失敗: " . $mysqli->connect_error);
}

// 預處理SQL語句
$stmt = $mysqli->prepare("INSERT INTO users (username, password) VALUES (?, ?)");

// 綁定參數(shù)
$stmt->bind_param("ss", $username, $password);

// 設置參數(shù)并執(zhí)行
$username = "john_doe";
$password = "secret";
$stmt->execute();

echo "新記錄插入成功";

// 關閉連接
$mysqli->close();
  1. 使用事務
$mysqli = new mysqli("localhost", "user", "password", "database");

// 檢查連接
if ($mysqli->connect_error) {
    die("連接失敗: " . $mysqli->connect_error);
}

// 開始事務
$mysqli->begin_transaction();

try {
    // 插入第一條記錄
    $stmt = $mysqli->prepare("INSERT INTO users (username, password) VALUES (?, ?)");
    $stmt->bind_param("ss", $username1, $password1);
    $username1 = "john_doe";
    $password1 = "secret";
    $stmt->execute();

    // 插入第二條記錄
    $stmt = $mysqli->prepare("INSERT INTO orders (user_id, product) VALUES (?, ?)");
    $stmt->bind_param("is", $userId, $product);
    $userId = 1;
    $product = "laptop";
    $stmt->execute();

    // 提交事務
    $mysqli->commit();
} catch (Exception $e) {
    // 發(fā)生錯誤,回滾事務
    $mysqli->rollback();
    echo "Error: " . $e->getMessage();
}

// 關閉連接
$mysqli->close();
  1. 使用存儲過程和命名參數(shù)

首先,創(chuàng)建一個帶有命名參數(shù)的存儲過程:

DELIMITER //
CREATE PROCEDURE insert_user_with_name(IN p_username VARCHAR(255), IN p_password VARCHAR(255))
BEGIN
    INSERT INTO users (username, password) VALUES (p_username, p_password);
END //
DELIMITER ;

然后,在PHP中調用該存儲過程:

$mysqli = new mysqli("localhost", "user", "password", "database");

// 檢查連接
if ($mysqli->connect_error) {
    die("連接失敗: " . $mysqli->connect_error);
}

// 調用存儲過程
$username = "john_doe";
$password = "secret";
$stmt = $mysqli->prepare("CALL insert_user_with_name(?, ?)");
$stmt->bind_param("ss", $username, $password);
$stmt->execute();

echo "新用戶插入成功";

// 關閉連接
$mysqli->close();

0