例外モード -PDO::ERRMODE_EXCEPTION を使用する (PDO の SQL ステートメントのエラーをキャプチャするための方法 3)
例外モードは PDOException を作成し、実行コードを try{... にカプセル化できる erorCode 属性を設定します。 }catch{...} ステートメントでは、キャッチされなかった例外によりスクリプトが中断され、問題が発生した場所をユーザーが理解できるようにスタック トレースが表示されます。
最初の 2 つの記事では、「デフォルト モードを使用する - PDO::ERRMODE_SILENT (PDO の SQL ステートメントのエラーをキャプチャする方法 1)」「 警告モードを使用する - PDO::ERRMODE_WARNING (PDO の SQL ステートメントのエラーをキャプチャする)」 ) 方法 2)》デフォルト モードと例外モードを紹介しましたので、今日は PDO で SQL ステートメントのエラーをキャプチャする 3 番目の方法を紹介します~
例外モードに関するもう 1 つの非常に便利な点は、従来の PHP と比較して-style の警告を使用すると、独自のエラー処理をより明確に構造化でき、例外モードではサイレント モードよりも必要なコードやネストが少なくなり、各データベース呼び出しの戻り値を明示的にチェックできます。
エラー コードの設定に加えて、PDO は PDOException 例外クラスもスローし、そのプロパティを設定してエラー コードとエラー情報を反映します。この設定は、スクリプト内のエラーが発生した箇所に効果的にズームインするため、デバッグ中にも非常に役立ち、コードの問題が発生する可能性のある領域を迅速に特定できるようになります。 (例外によってスクリプトが終了した場合、トランザクションは自動的にロールバックされることに注意してください)。
データベース内のデータの削除操作を実行する場合、例外モード、警告モード、デフォルト モードの違いを理解するために、データベースを例外モードに設定し、間違った SQL ステートメントを作成します。
具体的な手順は以下の通りです。
(1) phpファイルを作成し、データベースに接続し、所定の処理文のprepare()メソッドとexecute()メソッドでSELECTクエリ操作を実行し、ループ出力を完了します。 while ステートメントと fetch() メソッドを通じてデータを取得し、別の php ファイルに接続するための削除ハイパーリンクを設定します。 コードは次のとおりです。
<?php header("Content-Type:text/html; charset=utf-8"); //设置页面的编码格式 $dbms = "mysql"; // 数据库的类型 $dbName ="php_cn"; //使用的数据库名称 $user = "root"; //使用的数据库用户名 $pwd = "root"; //使用的数据库密码 $host = "localhost"; //使用的主机名称 $dsn = "$dbms:host=$host;dbname=$dbName"; try{ $pdo=new PDO($dsn,$user,$pwd);//初始化一个PDO对象,就是创建了数据库连接对象$pdo $pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION); //设置为警告模式 $query="select * from user";//需要执行的sql语句 $res=$pdo->prepare($query);//准备查询语句 $res->execute(); //执行查询语句,并返回结果集 ?> <table border="1" width="500"> <tr> <td height="22" align="center" valign="middle">id</td> <td height="22" align="center" valign="middle">用户名</td> <td height="22" align="center" valign="middle">密码</td> <td height="22" align="center" valign="middle">操作</td> </tr> <?php while($result=$res->fetch(PDO::FETCH_ASSOC)){ // 循环输出查询结果集,并且设置结果集为关联数据形式。 ?> <tr> <td height="22" align="center" valign="middle"><?php echo $result["id"];?></td> <td height="22" align="center" valign="middle"><?php echo $result["username"];?></td> <td height="22" align="center" valign="middle"><?php echo $result["password"];?></td> <td height="22" align="center" valign="middle"><a href="2.php?code_id=<?php echo $result['id'];?>">删除</td> </tr> <?php } }catch(Exception $e){ die("Error!:".$e->getMessage().'<br>'); } ?> </table>
出力結果は次のとおりです。
(2) 別のファイルを作成してハイパーリンクのデータ ID 値を取得し、データベースに接続し、setAttribute() メソッドで例外モードに設定し、DELETE 削除ステートメントを定義し、ファイル内のデータを削除します。不正なデータ テーブルを指定し、try{...}catch{...} ステートメントを渡すとエラー メッセージが表示されます。具体的なコードは次のとおりです。
<?php $id = $_GET['code_id']; if($id){ header("Content-Type:text/html; charset=utf-8"); //设置页面的编码格式 $dbms = "mysql"; // 数据库的类型 $dbName ="php_cn"; //使用的数据库名称 $user = "root"; //使用的数据库用户名 $pwd = "root"; //使用的数据库密码 $host = "localhost"; //使用的主机名称 $dsn = "$dbms:host=$host;dbname=$dbName"; try{ $pdo=new PDO($dsn,$user,$pwd);//初始化一个PDO对象,就是创建了数据库连接对象$pdo $pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION); //设置为警告模式 $query="delete * from user_12 where id = $id";//需要执行的sql语句 $res=$pdo->prepare($query);//准备查询语句 $res ->bindParam(':id',$_GET['code_id']); //绑定更新数据 $res->execute(); //执行查询语句,并返回结果集 }catch (PDOException $e){ echo "PDO Exception Caught"; echo 'Error with the database:<br>'; echo 'SQL Query;'.$query; echo '<pre class="brush:php;toolbar:false">'; echo "Error:".$e -> getMessage()."<br>"; echo "Code:".$e ->getCode()."<br>"; echo "File:".$e ->getFile()."<br>"; echo "Line:".$e ->getLine()."<br>"; echo "Trace:".$e ->getTraceAsString()."<br>"; echo ""; } }
注:
上記のコードでは、DELETE 削除ステートメントを定義するときに、意図的に間違ったデータ テーブル名 user_12 を使用しました (正しいデータ テーブル名は user)。これはテスト用に書かれています。
例外モードに設定した後、間違った SQL ステートメントを実行すると、出力結果は次のようになります:
PDO で SQL ステートメントのエラーをキャッチする 3 つの方法の紹介は終わりました。 PDO での SQL ステートメントのエラーのキャプチャについてはある程度理解できたので、次の記事で引き続き PDO でのエラー処理方法を紹介します。詳細については、「PDO でのエラー処理方法 1」を参照してください。 - errorCode() メソッド」!
以上が例外モード -PDO::ERRMODE_EXCEPTION を使用する (PDO の SQL ステートメントのエラーをキャプチャする方法 3)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

絶対セッションのタイムアウトはセッションの作成時に開始され、アイドルセッションタイムアウトはユーザーの操作なしに開始されます。絶対セッションタイムアウトは、金融アプリケーションなど、セッションライフサイクルの厳格な制御が必要なシナリオに適しています。アイドルセッションタイムアウトは、ソーシャルメディアなど、ユーザーが長い間セッションをアクティブに保つことを望んでいるアプリケーションに適しています。

サーバーセッションの障害は、手順に従って解決できます。1。セッションが正しく設定されていることを確認するために、サーバーの構成を確認します。 2.クライアントCookieを確認し、ブラウザがそれをサポートしていることを確認し、正しく送信します。 3. Redisなどのセッションストレージサービスを確認して、それらが正常に動作していることを確認します。 4.アプリケーションコードを確認して、正しいセッションロジックを確認します。これらの手順を通じて、会話の問題を効果的に診断および修復し、ユーザーエクスペリエンスを改善することができます。

session_start()iscrucialinphpformangingusersions.1)itInitiateSanewsessionifnoneExists、2)resumesanexistingsession、および3)SetSessionCookieforcontinuityAcrossRequests、ApplicationslicationSliviseSlikeUserauthicationAnticatent。

HTTPonlyフラグを設定することは、XSS攻撃を効果的に防止し、ユーザーセッション情報を保護することができるため、セッションCookieにとって重要です。具体的には、1)HTTPONLYフラグは、JavaScriptがCookieにアクセスするのを防ぎます。2)Flagは、PHPとFlaskのSetCookiesとMake_Responseを介して設定できます。

phpsessionssolvetheprobrof of maintainsea crossmultiplehttprequestsbyStoringdataontaonsociatingitiTauniquesessionid.1)それらは、通常はヨーロッパの側面、および一般的には、測定されている

phpssionscanStorestrings、numbers、arrays、andobjects.1.strings:textdatalikeusernames.2.numbers:integersorfloatsforcounters.3.arrays:listslikeshoppingcarts.4.objects:complextructuresthataresialized。

tostartaphpsession、outsession_start()atthescript'sbeginning.1)placeitbe foreanyouttosetthesscookie.2)usesionsionsionsionserdatalikelogintatussorshoppingcarts.3)再生セッションインドストップレベントフィックスアタック

セッション再生とは、新しいセッションIDを生成し、セッション固定攻撃の場合にユーザーが機密操作を実行するときに古いIDを無効にすることを指します。実装の手順には次のものが含まれます。1。感度操作を検出、2。新しいセッションIDを生成する、3。古いセッションIDを破壊し、4。ユーザー側のセッション情報を更新します。


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

SublimeText3 英語版
推奨: Win バージョン、コードプロンプトをサポート!

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

SublimeText3 Linux 新バージョン
SublimeText3 Linux 最新バージョン

ZendStudio 13.5.1 Mac
強力な PHP 統合開発環境
