6.4 フィールド数とフィールド名を調べる

SELECT文の発行によって返された結果セットのフィールド数を取得するには「mssql_num_fields関数」を使います。引数には、mssql_query関数の返り値である結果セットIDを指定します。

また、フィールド数とレコード数を上限とするループ処理で「mssql_field_name関数」「mssql_result関数」を組み合わせて使うことによって、それぞれ「フィールド名」とすべての「レコード内容(=データの値)」を出力することができます。
  • mssql_field_name関数を使うと、結果セットの第2引数番目のフィールド名を取得することができます。先頭フィールドを「0」として指定します。
  • mssql_result関数を使うと、1レコードずつループで読み込むのではなく、特定のレコードの特定のフィールドだけを取り出すことができます。最初の引数に結果セットIDを、2番目の引数に取り出したいレコード番号を、3番目の引数に取り出したいフィールド番号を、いずれも先頭を「0」とする数え方で指定します。
<?php

  $DBSERVER   = "localhost";    //SQL Serverサーバー名
  $DBUSER     = "testuser";     //ログインユーザー名
  $DBPASSWORD = "test";         //パスワード
  $DBNAME     = "NorthwindCS";  //データベース名

  //SQL Serverに接続
  if (! $con = mssql_connect($DBSERVER, $DBUSER, $DBPASSWORD)) {
    exit("SQL Serverに接続できませんでした!");
  }
  //データベースを選択
  mssql_select_db($DBNAME);

  //仕入先テーブルから都道府県が東京都のレコードだけ読み込むSQLを組み立て
  $sql = "SELECT * FROM 仕入先 WHERE 都道府県 = '東京都'";
  //結果セットを取得
  $rst = mssql_query($sql);

  //結果セットからフィールド数を取得
  $fldmax = mssql_num_fields($rst);
  $msg = "このテーブルには $fldmax ケのフィールドがあります。<BR>";
  //結果セットのレコード数を取得
  $recmax = mssql_num_rows($rst);
  $msg .= "レコード数は $recmax 件です。<BR><BR>";

  //各フィールド名を取得
  $body = "<TR>";
  for ($fldnum = 0; $fldnum < $fldmax; $fldnum++) {
    $body .= "<TH nowrap>" . mssql_field_name($rst, $fldnum) . "</TH>";
  }
  $body .= "</TR>";

  //結果セットからデータをループで読み込み
  for ($recnum = 0; $recnum < $recmax; $recnum++) {
    $body .= "<TR>";
    //各フィールドのデータをループで読み込み
    for ($fldnum = 0; $fldnum < $fldmax; $fldnum++) {
      $body .= "<TD>" . mssql_result($rst, $recnum, $fldnum) . "</TD>";
    }
    $body .= "</TR>";
  }

  //結果セットを破棄
  mssql_free_result($rst);

  //SQL Serverとの接続を解除
  mssql_close();

?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<HTML>
<HEAD>
<META http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
<META http-equiv="Content-Style-Type" content="text/css">
</HEAD>
<BODY>
<?=$msg?>
<TABLE border="1">
<?=$body?>
</TABLE>
</BODY>
</HTML>
| Index | Prev | Next |

 

Copyright © T'sWare All rights reserved