数据库值显示两次

时间:2013-01-11 15:05:10

标签: php

以下是我从数据库中检索价值的代码

    $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 

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

5 个答案:

答案 0 :(得分:2)

  

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

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

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

尝试在mysql_fetch_array来电中指定MYSQL_ASSOC

答案 1 :(得分: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。

答案 2 :(得分:0)

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

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

希望它会对你有所帮助。

答案 3 :(得分:0)

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

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

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

按照惯例,我还会提醒您 mysql函数已被弃用,您应该考虑使用例如PDO

答案 4 :(得分:0)

更改此行:

$project_details = mysql_fetch_array($project_details_id);

这一行:

$project_details = mysql_fetch_array($project_details_id, MYSQL_ASSOC);