1

既存のトピックを調べました。問題の修正はありますが、それが正しい修正ではないことはわかっており、回避策を作成するよりも、これを正しく機能させることに関心があります。

私は、3 つのテーブル、診断、訪問、および治療があるプロジェクトを持っています。患者は診察を受け、治療を受けます。治療は診断のためのものです。

この情報をページに表示するには、患者の診断を表示してから、患者が来院した時間を表示し、その来院情報をクリックして治療情報を表示できるようにします。

これを行うには、php でこの関数を作成します。

<?
function returnTandV($dxid){
    include("db.info.php"); 
    $query = sprintf("SELECT treatments.*,visits.* FROM treatments LEFT JOIN visits ON
    treatments.tid = visits.tid WHERE treatments.dxid = '%s' ORDER BY visits.dos DESC",
    mysql_real_escape_string($dxid));

    $result = mysql_query($query) or die("Failed because: ".mysql_error()); 
    $num = mysql_num_rows($result);
    for($i = 0; $i <= $num; ++$i) {
        $v[$i] = mysql_fetch_array($result MYSQL_ASSOC);
        ++$i;
    }

    return $v;
}
?>

関数は機能し、治療と訪問の両方からのすべての行を 1 つの大きな関連付けとして表示します。配列の問題は、データベースに実際にあるよりも常に1行少ない行を返すことであり、その理由はわかりません。全部で 3 行ありますが、msql_num_rows() は 2 としか表示しませ($num = mysql_num_rows($result)+1;)ん。

4

3 に答える 3

2

このセクションは私には疑わしいようです:

for($i = 0; $i <= $num; ++$i) {
    $v[$i] = mysql_fetch_array($result MYSQL_ASSOC);
    ++$i;
}
  1. あなたはi2回インクリメントしています
  2. あなたが$i <= $num望む可能性が最も高いときに行く予定です$i < $num

この組み合わせが原因で、予期しない結果が得られる場合があります。基本的には 3 つの行がありますが、行 0 と 2 のみを要求しています (行 1 をスキップします)。

于 2012-06-27T16:32:34.517 に答える
0

$i = 0 の場合、配列に何かを追加する前にそれをインクリメントすると、最初の行がスキップされます。ループの実行後に $i をインクリメントして、0 (最初のキー) から開始します。

for ループはこれには適していません: 代わりに:

$query=mysql_query('  --mysql ---  ');


while ($row=mysql_fetch_array($query)){

$v[]=$row["dbcolumn"];

}

関数 then.compact ときちんとした $v を返します。キー名が一意である限り、連想配列を作成できます (プライマリ ID など)。 $v["$priid"]=$row[1];

于 2012-06-27T16:34:44.320 に答える
0

プログラマーは常に 0 からカウントします。したがって、ループは 0 から開始されます。2 で終了すると、3 行に達したことになります。

行 0、行 1、行 2。

于 2012-06-27T16:28:01.297 に答える