PDO を使用した効率的な行の存在チェック
データベース操作では、多くの場合、特定のアクションを実行する前に行が存在するかどうかを判断する必要があります。この文脈で、質問者は、PHP データ オブジェクト (PDO) を使用してデータベース内の行の存在を効果的に確認する方法に関するガイダンスを求めています。
この問題に対処するために、最初に試みられたアプローチは、フェッチされた行の数を確認することでした。行。ただし、コード if (count($row) == 0) は無効です。PDO は fetch メソッドを使用して一度に 1 行を取得するため、count は常に 1 になります。同様に、if($stmt->rowCount( )
推奨される解決策には、フェッチ メソッドの戻り値を直接調べることが含まれます。提供されたコード サンプルでは:
<code class="php">if( ! $row) { echo 'nothing found'; }</code>
フェッチ呼び出しで行が生成されない場合は、false が返され、if 条件がトリガーされます。このアプローチは、行が存在しないことを効果的に判断します。
複数の行をチェックするには、fetchAll メソッドを利用できます。
<code class="php">$rows = $stmt->fetchAll(PDO::FETCH_ASSOC); // Same here if( ! $rows) { echo 'nothing found'; }</code>
fetchAll メソッドが結果を返せなかった場合も、結果が返されます。 false となり、if 条件が満たされます。
さらに、行が指定された基準に一致する場合に値 1 を返すように MySQL に指示することで、データの明示的なフェッチを回避することもできます:
<code class="php">$sql = 'SELECT 1 from table WHERE id = ? LIMIT 1'; $stmt = $conn->prepare($sql); $stmt->execute([$_GET['id']]); if($stmt->fetchColumn()) echo 'found';</code>
このメソッドは、一致が見つかった場合は値 1 を返し、そうでない場合は false を返すクエリを実行します。 fetchColumn メソッドは結果セットの最初の列を取得します。この場合、条件付きで 1 が返されます。
以上がPDO を使用して行の存在を効果的に確認するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。