PHP は、動的 Web アプリケーションからのデータを処理するために使用されるオープン ソース言語です。多くの Web アプリケーションはデータベースを使用してデータを保存および処理します。データベース接続は、Web アプリケーションの開発において避けられない部分です。この記事では、PHP のデータベース接続テクノロジと、一般的な問題の概要について説明します。
PHP では、MySQLi と PDO という 2 つのデータベース接続テクノロジが利用可能です。 MySQLi は MySQL 拡張機能の拡張バージョンであり、より多くの機能と高速な速度をサポートします。一方、PDO は MySQL、Oracle、SQL Server などの複数のデータベースに使用できます。
MySQLi は、オブジェクト指向プログラミング (OOP) およびプロシージャ指向プログラミング (POP) 構造を使用します。オブジェクト指向 API およびコマンド ライン (CLI) プロシージャを提供します。 MySQLi はトランザクションやストアド プロシージャなどの高度なアプリケーション シナリオも処理できるため、PHP が MySQL に接続する最も一般的な方法の 1 つとなっています。次に、MySQLi を使用して MySQL データベースに接続する例を示します。
// 配置数据库连接信息 $host = 'localhost'; $username = 'user'; $password = 'pwd'; $dbname = 'test_db'; // 连接MySQL数据库 $conn = mysqli_connect($host, $username, $password, $dbname); // 检查连接是否成功 if (!$conn) { die("连接失败: " . mysqli_connect_error()); } echo "连接成功";
PDO は、データベース ドライバーを PDO クラスから分離します。これは、コードをそのままにしてデータベースを簡単に変更できることを意味します。 PDO には、プリペアド ステートメントやトランザクションなど、多くのデータベース抽象化レイヤーも含まれています。以下は、PDO を使用して MySQL データベースに接続する例です。
// 配置数据库连接信息 $host = 'localhost'; $username = 'user'; $password = 'pwd'; $dbname = 'test_db'; // 连接MySQL数据库 try { $conn = new PDO("mysql:host=$host;dbname=$dbname", $username, $password); // 设置 PDO 错误模式为异常 $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); echo "连接成功"; } catch(PDOException $e) { echo "连接失败: " . $e->getMessage(); }
PHP でデータベース接続を使用するときに、一般的な問題が発生する可能性があります。これらの問題を解決するためのベスト プラクティスは次のとおりです。
(1) エンコーディングの問題
#データベースに接続する前に、エンコーディングを設定する必要があります。 MySQLi では、mysqli_set_charset() を使用してエンコーディングを設定できます。PDO では、データベースに接続するときにエンコーディングを設定できます。以下に例を示します。
// 在MySQLi中设置编码 mysqli_set_charset($conn,"utf8"); // 在PDO中设置编码 $conn->exec("set names utf8");
(2) SQL インジェクション
ユーザーがデータを入力すると、SQL インジェクション攻撃を実行する悪意のあるコードが構築される可能性があります。これを防ぐには、準備されたステートメントを使用する必要があります。次に、準備されたステートメントの使用例を示します。
// 使用MySQLi中预处理语句来查询数据 $stmt = $conn->prepare("SELECT * FROM users WHERE username = ? AND password = ?"); $stmt->bind_param("ss", $username, $password); // 使用PDO中预处理语句来查询数据 $stmt = $conn->prepare("SELECT * FROM users WHERE username = :username AND password = :password"); $stmt->bindParam(':username', $username); $stmt->bindParam(':password', $password); $stmt->execute();
(3) オープンする接続が多すぎる
同時にオープンされる接続が多すぎると、サーバーがクラッシュする可能性があります。これを防ぐには、接続プーリングを使用します。接続プーリングは、接続を管理し、アイドル状態の接続を定期的にクリアするのに役立ちます。以下は接続プールの使用例です:
// 创建连接池并设置最大连接数以及空闲时间 $pool = new ConnectionPool('mysql:host=localhost;dbname=test_db', 'user', 'pwd', [ 'max_connections' => 10, 'idle_timeout' => 30, ]); // 从连接池中取出连接 $conn = $pool->getConnection(); // 将连接放回连接池 $pool->release($conn);
つまり、PHP ではデータベースへの接続が非常に重要です。 MySQLi と PDO はデータベースに接続するためによく使用される 2 つの方法なので、使用する前に慎重に選択する必要があります。同時に、エンコードの問題、SQL インジェクション、過剰な接続のオープンなど、使用時の一般的な問題に注意する必要があります。
以上がPHP におけるデータベース接続テクノロジと一般的な問題のまとめの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。