將 MySQL 函式轉換為適用於 MySQL 和 MSSQL 的 PDO
MySQL 函數的棄用與替代方案
MySQL 函數擴充功能已棄用,將在未來版本中移除。建議使用 MySQLi 或 PDO_MySQL 擴充功能作為替代。與 MySQL 函數相比,MySQLi 和 PDO 提供了改進的安全性和功能。
實作 PDO
PDO (PHP Data Objects) 是用於存取資料庫的物件導向的 API。若要使用 PDO 連線到資料庫,請使用 PDO 建構函式建立新的 PDO 實例。
連接到 MySQL
<code class="language-php">$dsn = 'mysql:dbname=databasename;host=127.0.0.1'; $user = 'dbuser'; $password = 'dbpass'; $dbh = new PDO($dsn, $user, $password);</code>
連接到 MSSQL
<code class="language-php">$dsn = 'sqlsrv:Server=127.0.0.1;Database=databasename'; $user = 'dbuser'; $password = 'dbpass'; $dbh = new PDO($dsn, $user, $password);</code>
使用 PDO 執行查詢
PDO 使用預處理語句來防止 SQL 注入漏洞。預處理語句定義了一個具有命名或索引佔位符的 SQL 查詢,用於表示變數。
<code class="language-php">$SQL = 'SELECT ID, EMAIL FROM users WHERE user = :username'; $preparedStatement = $dbh->prepare($SQL);</code>
綁定變數
使用 bindParam
或 bindValue
將值綁定到預處理語句。
<code class="language-php">$preparedStatement->bindParam(':username', $username);</code>
執行查詢
執行預處理語句以取得結果。
<code class="language-php">$preparedStatement->execute();</code>
取得結果
PDO 提供了 fetch
和 fetchAll
等方法,可以將結果作為陣列檢索。
<code class="language-php">while ($row = $preparedStatement->fetch()) { echo $row['ID']; echo $row['EMAIL']; }</code>
使用 PDO 連接類別
您可以建立一個 PDO 連線類別來簡化資料庫操作。
<code class="language-php">class Database { protected $connection; public function __construct($dsn, $user, $password) { $this->connection = new PDO($dsn, $user, $password); } public function query($SQL) { return $this->connection->query($SQL); } public function prepare($SQL, $params = []) { $preparedStatement = $this->connection->prepare($SQL); $preparedStatement->execute($params); return $preparedStatement; } } // 使用方法: $db = new Database($dsn, $user, $password); $SQL = 'SELECT ID, EMAIL FROM users WHERE user = :username'; $result = $db->prepare($SQL, ['username' => $username]); while ($row = $result->fetch()) { echo $row['ID']; echo $row['EMAIL']; }</code>
以上是如何從已棄用的 MySQL 函式遷移到 PDO for MySQL 和 MSSQL?的詳細內容。更多資訊請關注PHP中文網其他相關文章!