2

这是我从数据库中检索值的代码

    $query = "SELECT * FROM t_contact
                      WHERE id = {$project_details_id} LIMIT 1";
     $all_post_info1 = mysql_query($query, $connection);
     confirm_query($all_post_info1);
     $project_details = mysql_fetch_array(show_project_details($project_details_id));

     foreach ($project_details as $fieldname) {
        echo $fieldname . "</br>";
     }

function confirm_query($confirm_result) {

    if (!$confirm_result) {
        die("Database query failed1: " . mysql_error());
    }
}

我为每个字段获得两次输出。我的数据库中有 27 列,我得到 54 个输出。例如,数据库中有名称、电子邮件列,我的输出显示如下

name
name
email
email 

有些人请告诉我这段代码有什么问题。

4

5 回答 5

2

通过使用 MYSQL_BOTH(默认),您将获得一个包含关联索引和数字索引的数组。

那是因为你$project_details实际上看起来像这样:

$project_details = array(
  [0] => 'name',
  [name] => 'name',
  [1] => 'email',
  [email] => 'email'
);

尝试MYSQL_ASSOC在您的mysql_fetch_array通话中指定。

于 2013-01-11T15:09:13.550 回答
1

尝试这样做:

$query = "SELECT * FROM t_contact
                        WHERE id = {$project_details_id} LIMIT 1";
$all_post_info1 = mysql_query($query, $connection);
confirm_query($all_post_info1);

while($data = mysql_fetch_assoc($all_post_info1))
{

print_r($data);

}

mysql_fetch_assoc 将返回一个关联数组,这意味着一个数组,其中键与查询中的字段相关联。mysql_fetch_array 将返回一个包含字段以及数字键值的数组,因此是双变量。我很少使用 mysql_fetch_array,几乎在所有情况下 mysql_fetch_assoc 都是要走的路。

于 2013-01-11T15:11:34.563 回答
0

而不是使用 foreach 你应该使用 while。例如:

while($row = db_fetch_array($all_post_info1)) {
    echo $row[field_name];
}

希望它会帮助你。

于 2013-01-11T15:09:35.790 回答
0

默认情况下返回索引和关联格式的mysql_fetch_array()键。

使用MYSQL_ASSOC参数仅获取关联版本:

$project_details = mysql_fetch_array(show_project_details($project_details_id), MYSQL_ASSOC);

按照惯例,我还会提醒您,不推荐使用 mysql 函数,您应该考虑使用例如PDO

于 2013-01-11T15:09:37.673 回答
0

更改此行:

$project_details = mysql_fetch_array($project_details_id);

有了这条线:

$project_details = mysql_fetch_array($project_details_id, MYSQL_ASSOC);
于 2013-01-11T15:10:12.533 回答