PHPデータベースから読み込んだデータのズレを解決する方法

PHPz
リリース: 2023-03-24 16:30:01
オリジナル
1364 人が閲覧しました

PHP は、多くの Web アプリケーションで広く使用されている人気のあるサーバー側スクリプト言語です。これらのアプリケーションでは、動的コンテンツをレンダリングするためにデータベースからデータを読み取る必要があることがよくあります。しかし、大量のデータを読み取る場合、データの位置がずれるという問題が発生することがあります。この記事では、PHP でデータベースから読み取られたデータの位置がずれている問題を紹介し、いくつかの解決策を提供します。

問題の説明

まず簡単な例を見てみましょう。学生情報を含むデータベース テーブルがあり、学生名、学生番号、生年月日などのフィールドが含まれているとします。次の PHP コードを使用して、データベースからデータを読み取り、Web ページに表示できます。

<?php
$conn = mysqli_connect("localhost", "root", "", "test");
$sql = "SELECT * FROM student";
$result = mysqli_query($conn, $sql);
?>

<table>
  <tr>
    <th>姓名</th>
    <th>学号</th>
    <th>出生日期</th>
  </tr>
  <?php while($row = mysqli_fetch_assoc($result)) { ?>
  <tr>
    <td><?php echo $row[&#39;name&#39;]; ?></td>
    <td><?php echo $row[&#39;id&#39;]; ?></td>
    <td><?php echo $row[&#39;dob&#39;]; ?></td>
  </tr>
  <?php } ?>
</table>

<?php
mysqli_close($conn);
?>
ログイン後にコピー

このコードは完璧に見えますが、ブラウザで実行すると、学生の名前が取得されます。学籍番号欄が間違っています。 ######どうしてこれなの?その理由は、データベース テーブルで定義したフィールドの順序が、コードでデータを読み取るときに定義した順序と一致していないためです。この例では、まずデータベース テーブルに学生 ID フィールドを定義し、次に名前フィールドと生年月日フィールドを定義します。ただし、PHP コードでは、名前、学籍番号、生年月日の順にデータを読み込むため、データの位置がずれてしまいます。

解決策

この問題を解決するには、いくつかの解決策があります:

1. データベース テーブルのフィールドの順序でデータを読み取ります

これは最も単純な解決策です。PHP コードでデータを読み取る順序をデータベース テーブルのフィールドの順序に調整するだけです。たとえば、上記の例では、コードを次のように変更できます。

<?php
$conn = mysqli_connect("localhost", "root", "", "test");
$sql = "SELECT id, name, dob FROM student";
$result = mysqli_query($conn, $sql);
?>

<table>
  <tr>
    <th>学号</th>
    <th>姓名</th>
    <th>出生日期</th>
  </tr>
  <?php while($row = mysqli_fetch_assoc($result)) { ?>
  <tr>
    <td><?php echo $row[&#39;id&#39;]; ?></td>
    <td><?php echo $row[&#39;name&#39;]; ?></td>
    <td><?php echo $row[&#39;dob&#39;]; ?></td>
  </tr>
  <?php } ?>
</table>

<?php
mysqli_close($conn);
?>
ログイン後にコピー

この解決策は単純ですが、テーブルに多数のフィールドがある場合は間違いを犯しやすくなります。

2. AS ステートメントを使用してフィールドに名前を付ける

2 番目の解決策は、データを読み取るときに AS ステートメントを使用して各フィールドのエイリアスを指定することです。たとえば、上記の例では、コードを次のように変更できます。

<?php
$conn = mysqli_connect("localhost", "root", "", "test");
$sql = "SELECT name, id AS student_id, dob FROM student";
$result = mysqli_query($conn, $sql);
?>

<table>
  <tr>
    <th>姓名</th>
    <th>学号</th>
    <th>出生日期</th>
  </tr>
  <?php while($row = mysqli_fetch_assoc($result)) { ?>
  <tr>
    <td><?php echo $row[&#39;name&#39;]; ?></td>
    <td><?php echo $row[&#39;student_id&#39;]; ?></td>
    <td><?php echo $row[&#39;dob&#39;]; ?></td>
  </tr>
  <?php } ?>
</table>

<?php
mysqli_close($conn);
?>
ログイン後にコピー

コードでは、AS ステートメントを使用して学生番号フィールドの名前を「student_id」に変更し、それを「Student ID」列にマップします。 。このようにして、データを正しく対応させることができます。

3. 配列モードを使用してデータを読み取る

3 番目の解決策は、配列モードを使用してデータを読み取ることであり、この方法によりフィールドの順序が矛盾するリスクを大幅に軽減できます。たとえば、上記の例では、コードを次のように変更できます。

<?php
$conn = mysqli_connect("localhost", "root", "", "test");
$sql = "SELECT * FROM student";
$result = mysqli_query($conn, $sql);
?>

<table>
  <tr>
    <th>姓名</th>
    <th>学号</th>
    <th>出生日期</th>
  </tr>
  <?php while($row = mysqli_fetch_array($result, MYSQLI_NUM)) { ?>
  <tr>
    <td><?php echo $row[1]; ?></td>
    <td><?php echo $row[0]; ?></td>
    <td><?php echo $row[2]; ?></td>
  </tr>
  <?php } ?>
</table>

<?php
mysqli_close($conn);
?>
ログイン後にコピー

この例では、mysqli_fetch_array($result, MYSQLI_NUM) 関数を使用して、読み取りデータを配列として返します。このようにして、データベース テーブル内の順序を気にせずに、配列の添字を介して各フィールドの値にアクセスできます。

概要

PHP によってデータベースから読み取られたデータの不整合はよくある問題ですが、これはさまざまな方法で解決できます。最善の解決策は、データを読み取るためにエイリアスや配列を使用するなど、コードを記述するときにこの問題をできる限り回避することです。この問題が発生した場合、それを解決する方法がいくつかあります。この問題を解決するには、データが正しく表示されるようにデータの対応関係を注意深くチェックする必要があることに注意してください。

以上がPHPデータベースから読み込んだデータのズレを解決する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート