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 个大关联。array 问题是它总是返回比数据库中实际少 1 行,我不知道为什么。总共有 3 行,但 msql_num_rows() 只会将其显示为 2。我的解决方法是只添加 1 ($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. 你增加i了两次
  2. 你会$i <= $num在你最想去的时候去$i < $num

这种组合可能是您获得意外结果的原因。基本上,您有三行,但您只要求第 0 行和第 2 行(跳过第 1 行)。

于 2012-06-27T16:32:34.517 回答
0

程序员总是从 0 开始计数。因此,您从 0 开始循环。如果以 2 结束,则您已达到 3 行。

第 0 行、第 1 行、第 2 行。

于 2012-06-27T16:28:01.297 回答
0

如果 $i = 0,并且在向数组添加内容之前将其递增,则跳过第一行。循环运行后增加 $i 以从 0(第一个键)开始。

For 循环对此不好:宁可这样做:

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


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

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

}

为您的函数返回 $v then.compact 和整洁。您可以创建一个关联数组,只要键名是唯一的(如主 ID).. $v["$priid"]=$row[1];

于 2012-06-27T16:34:44.320 回答