MySQL是一款廣泛使用的開源數據庫管理系統,被廣泛應用于互聯網應用、數據分析、金融等領域。它具有高性能、穩定可靠、擴展性強等特點,被廣泛認可。
PDO(PHP數據對象)是PHP的一種數據庫擴展技術,用于與各種數據庫進行交互。PDO提供了一個通用的API,可以連接MySQL、SQLite、Oracle、PostgreSQL等多種數據庫。相較于MySQL擴展,PDO更加抽象化和靈活,可以同時支持多種數據庫。同時,PDO還提供了異常處理和預處理語句等功能。
// 使用MySQL擴展建立連接 $host = 'localhost'; $user = 'root'; $password = '123456'; $dbname = 'test'; $conn = mysqli_connect($host, $user, $password, $dbname); if (!$conn) { die('連接失敗: ' . mysqli_connect_error()); } // 使用PDO建立連接 $dsn = 'mysql:host=localhost;dbname=test'; $username = 'root'; $password = '123456'; $options = array( PDO::ATTR_ERRMODE =>PDO::ERRMODE_EXCEPTION ); try { $conn = new PDO($dsn, $username, $password, $options); } catch (PDOException $e) { echo '連接失敗: ' . $e->getMessage(); }
如上所示,使用MySQL擴展建立連接時,需要傳遞多個參數,并且需要手動檢查連接是否成功。而使用PDO建立連接時,只需要傳遞DSN(數據源名稱)、用戶名、密碼等簡單參數,且支持異常處理,代碼可讀性更高。
PDO還提供了預處理語句的支持,可以防止SQL注入攻擊,并提高運行效率。
// 使用MySQL擴展查詢數據 $username = mysqli_real_escape_string($conn, $_POST['username']); $password = mysqli_real_escape_string($conn, $_POST['password']); $sql = "SELECT * FROM users WHERE username = '$username' AND password = '$password'"; $result = mysqli_query($conn, $sql); if (mysqli_num_rows($result) >0) { echo '登錄成功'; } else { echo '用戶名或密碼錯誤'; } // 使用PDO查詢數據 $username = $_POST['username']; $password = $_POST['password']; $sql = "SELECT * FROM users WHERE username = :username AND password = :password"; $stmt = $conn->prepare($sql); $stmt->execute(array(':username' =>$username, ':password' =>$password)); if ($stmt->rowCount() >0) { echo '登錄成功'; } else { echo '用戶名或密碼錯誤'; }
如上所示,使用MySQL擴展查詢數據時,需要使用mysqli_real_escape_string函數對輸入參數進行轉義,并把它們嵌入到SQL語句中。而使用PDO查詢數據時,可以使用占位符,通過prepare和execute方法來執行預處理語句,PDO會自動轉義參數并且避免SQL注入攻擊。