<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-comment">// この部分は、記事の内容とは何の関係もありません,好きなように追加できます PHP コメントまたは初期化コード</span></span><span>
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"初期化が完了しました\n"</span></span><span>;
</span><span><span class="hljs-variable">$dummy</span></span><span> = </span><span><span class="hljs-literal">true</span></span><span>;
</span><span><span class="hljs-meta">?></span></span><span>
------------------------------------------------------------
</span><span><span class="hljs-comment"># 1つ般 PDOStatement::errorCode エラーコードとそのソリューション,FAQのトラブルシューティング方法?</span></span><span>
存在する PHP 真ん中,使用 PDO(PHP Data Objects)データベース操作を実行するとき,私たちはしばしば遭遇します `</span><span><span class="hljs-title class_">PDOStatement</span></span><span>::</span><span><span class="hljs-variable constant_">errorCode</span></span><span>` エラーコードを返します。これらのエラーコードとその意味を理解します,迅速な位置決めの問題、開発効率の向上は非常に重要です。この記事では、1つ般的なエラーコードを詳細に紹介します、原因と解決策,トラブルシューティングのアイデアを提供します。
</span><span><span class="hljs-comment">## 1つ、PDOStatement::errorCode 導入</span></span><span>
`</span><span><span class="hljs-title class_">PDOStatement</span></span><span>::</span><span><span class="hljs-variable constant_">errorCode</span></span><span>` 方法返回1つ个 SQLSTATE エラーコード,这是1つ个 </span><span><span class="hljs-number">5</span></span><span> 位的标准化エラーコード,識別に使用されます SQL 执行真ん中的错误情况:
- 最初の2桁は、エラーカテゴリを示します(Class)
- 最後の3桁は、特定のエラーを示します(Subclass)
コール例:
```php
</span><span><span class="hljs-variable">$stmt</span></span><span> = </span><span><span class="hljs-variable">$pdo</span></span><span>-></span><span><span class="hljs-title function_ invoke__">prepare</span></span><span>(</span><span><span class="hljs-string">"SELECT * FROM non_existing_table"</span></span><span>);
</span><span><span class="hljs-variable">$stmt</span></span><span>-></span><span><span class="hljs-title function_ invoke__">execute</span></span><span>();
</span><span><span class="hljs-variable">$errorCode</span></span><span> = </span><span><span class="hljs-variable">$stmt</span></span><span>-></span><span><span class="hljs-title function_ invoke__">errorCode</span></span><span>();
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$errorCode</span></span><span>; </span><span><span class="hljs-comment">// 可能な出力 "42S02"</span></span><span>
</span></span>以下は、開発でしばしば発生するエラーコードとその考えられる理由です。
SQLの実行が成功し、エラーが発生しないことを示します。これはPDOの通常のリターンです。
通常、以下のような脂肪性の警告に使用されます。
自動データ型変換警告
SQLの実行は成功しましたが、警告メッセージがあります
詳細情報は、pdostatement :: errorinfo()を介して取得できます。
典型的なシナリオ:
主キーの挿入を繰り返します
外部のキーの制約は失敗しました
一意のインデックス競合
解決:
挿入されたデータが既に存在するかどうかを確認してください
外部キーに関連付けられたデータが存在することを確認してください
繰り返しの操作を避けるために、ビジネスロジックを調整します
一般的な理由:
SQL構文エラー
テーブルまたはフィールド名のスペルミス
現在のデータベースユーザー許可は不十分です
トラブルシューティング方法:
完全なSQLを印刷して、データベース管理ツールで実行します
データベースユーザーの許可構成を確認します
テーブル名とフィールド名が正しいことを確認する
これは一般的なエラーコードであり、通常、PDOがエラーの特定の原因を決定できないことを意味します。考えられる理由は次のとおりです。
切断されたデータベース接続
実行タイムアウト
ドライバー内部エラー
解決:
データベース接続ステータスを確認します
タイムアウト構成を追加します
詳細については、データベースログを表示します
標準のSQLSTATEエラーコードに加えて、MySQL 23000などの特定のエラーコードを返すデータベースには、MySQLエラー番号1062 (繰り返しキー)も添付されます。この場合、データベースドライバーの元のエラーメッセージは、pdostatement :: errorinfo()の3番目の要素と組み合わせて取得できます。
<span><span><span class="hljs-variable">$errorInfo</span></span><span> = </span><span><span class="hljs-variable">$stmt</span></span><span>-></span><span><span class="hljs-title function_ invoke__">errorInfo</span></span><span>();
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$errorInfo</span></span><span>[</span><span><span class="hljs-number">2</span></span><span>]; </span><span><span class="hljs-comment">// データベースドライバーによって返された詳細なエラー情報を出力します</span></span><span>
</span></span>SQLステートメントの正確性を確認してください<br> SQLを印刷し、データベースクライアントで検証を実行します。
完全なエラーメッセージを表示<br> ErrorInfo()を使用して詳細情報を取得して、問題の分析に役立ちます。
パラメーターバインディング<br>を確認してください 結合パラメーターのタイプと順序が正しいことを確認してください。
データベース接続ステータス<br>を確認します 接続が誤って切断されている場合、HY000エラーを引き起こす可能性があります。
データベースログ<br>を確認してください データベースログに多くのエラーが記録されています。
<span><span><span class="hljs-keyword">try</span></span><span> {
</span><span><span class="hljs-variable">$stmt</span></span><span> = </span><span><span class="hljs-variable">$pdo</span></span><span>-></span><span><span class="hljs-title function_ invoke__">prepare</span></span><span>(</span><span><span class="hljs-string">"INSERT INTO users(id, name) VALUES(:id, :name)"</span></span><span>);
</span><span><span class="hljs-variable">$stmt</span></span><span>-></span><span><span class="hljs-title function_ invoke__">execute</span></span><span>([</span><span><span class="hljs-string">':id'</span></span><span> => </span><span><span class="hljs-number">1</span></span><span>, </span><span><span class="hljs-string">':name'</span></span><span> => </span><span><span class="hljs-string">'Alice'</span></span><span>]);
} </span><span><span class="hljs-keyword">catch</span></span><span> (PDOException </span><span><span class="hljs-variable">$e</span></span><span>) {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Error Code: "</span></span><span> . </span><span><span class="hljs-variable">$stmt</span></span><span>-></span><span><span class="hljs-title function_ invoke__">errorCode</span></span><span>() . </span><span><span class="hljs-string">"\n"</span></span><span>;
</span><span><span class="hljs-title function_ invoke__">print_r</span></span><span>(</span><span><span class="hljs-variable">$stmt</span></span><span>-></span><span><span class="hljs-title function_ invoke__">errorInfo</span></span><span>());
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Exception message: "</span></span><span> . </span><span><span class="hljs-variable">$e</span></span><span>-></span><span><span class="hljs-title function_ invoke__">getMessage</span></span><span>() . </span><span><span class="hljs-string">"\n"</span></span><span>;
}
</span></span>上記の方法を使用すると、一般的なpdostatementエラーを迅速に配置して解決できます。
pdostatement :: errorCodeは、標準のSQLSTATEエラーコードを提供して、エラータイプをすばやく決定するのに役立ちます。
errorinfo()は、より詳細なドライバーレイヤー情報を返して、正確なトラブルシューティングを行います。
一般的なエラーには、制約違反、構文エラー、不十分な権限、および一般的なエラーが含まれます。
体系的な調査プロセスは、開発者が短期間で問題を見つけるのに役立ち、開発効率を向上させることができます。
PDOエラーコードとトラブルシューティング方法をマスターすると、データベースの操作がより安全で信頼性が高まり、不適切なエラー処理による異常なプログラムの中断を避けることができます。
<span></span>
関連タグ:
PDOStatement