:例外メカニズム( PDOException )を介して接続エラーとクエリエラーを報告します。コードはtry ... catchを使用してキャプチャできます。例外情報には、詳細なエラーの説明が含まれています。
mysqli : $ mysqli-> connect_errorや$ mysqli-> connect_errnoなどのプロパティとメソッドを使用して、接続エラーを報告します。エラーは自動的に例外をスローすることはなく、積極的に検出および処理する必要があります。
言い換えれば、PDOは例外メカニズムにもっと依存していますが、Mysqliは明示的なエラーチェックに依存しています。
try {
$pdo = new PDO('mysql:host=gitbox.net;dbname=testdb;charset=utf8', 'username', 'password');
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
echo "接続に正常に";
} catch (PDOException $e) {
echo "接続に失敗しました: " . $e->getMessage();
}
$mysqli = new mysqli('gitbox.net', 'username', 'password', 'testdb');
if ($mysqli->connect_error) {
die("接続に失敗しました: " . $mysqli->connect_error);
}
echo "接続に正常に";
注: mysqliは、$ mysqli-> connect_errorを介して接続エラーメッセージを取得し、例外を自動的にスローすることはなく、手動でチェックする必要があります。
PDOは例外を使用し、コード構造はよりシンプルで安全です。
mysqliは、$ mysqli-> connect_errorまたは$ mysqli-> connect_errnoを明示的に判断する必要があります。
Try ... Catch to Catch Exceptionsを使用することに慣れている場合は、MySQLIに切り替えた後、エラー処理ロジックを調整する必要があります。
PDOは、 charset = utf8などのDSN接続文字列に設定された文字を直接指定します。MySQLIには追加の呼び出しが必要です。
$mysqli->set_charset('utf8');
それ以外の場合は、中国の文字化けコードに問題があります。
PDOは多くの接続オプションをサポートしていますが、MySQLIはいくつかのオプションをサポートしています。例えば:
PDOはPDO :: attr_persistentで有効にできます。
MySQLIでは、追加の処理を必要とするか、さまざまな方法を使用して永続的な接続を有効にします。
PDO前処理ステートメントは、$ stmt = $ pdo-> prepare($ sql)を使用します。名前付きパラメーターバインディングをサポートします。
mysqliの前処理ステートメントは、$ stmt = $ mysqli-> prepare($ sql)を使用します。 、および疑問符のプレースホルダーのみがサポートされています。
元のコードが多数の名前のパラメーターを使用している場合、疑問符として書き換える必要があります。
MySQLIは、デフォルトで例外をスローしません。 PDOの例外キャプチャーをシミュレートする場合は、MySQLI例外スロー関数を有効にすることができます。
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
オープニング後、MySQLIはMySQLI_SQL_EXCEPTIONを投げます。これは、統一された方法でエラーを処理しやすいです。
プロジェクト | PDO | mysqli |
---|---|---|
エラー処理 | 例外キャッチ(試してみてください...キャッチ) | $ CONNECT_ERRORを外部的に確認して、例外を有効にします |
接続文字列形式 | DSN文字列(charsetを設定できます) | charsetを個別に設定するには、 set_charset()を呼び出す必要があります |
前処理パラメーターバインディング | 命名パラメーターをサポートします | 疑問符のプレースホルダーのみがサポートされています |
永続的な接続サポート | オプションで設定します | 実装するにはさまざまな方法が必要です |
要するに、PDOからMySQLIへの切り替えは、交換接続方法であるだけでなく、エラー処理、設定のエンコード、前処理ステートメントなどの違いを包括的に考慮して、不適応によって引き起こされる暗黙のバグを回避します。