【问题标题】:PHP mySQL query returning single field as 2-element arrayPHP mySQL 查询将单个字段作为 2 元素数组返回
【发布时间】:2025-12-13 01:30:01
【问题描述】:

我在 PHP 脚本中使用 mySQL 语句来返回给定用户的电子邮件地址。你会看到下面的函数:

    public static function getEmailAddress($username) {
    $conn = parent::connect();
    $sql = "SELECT emailAddress FROM " . TBL_USERS . " WHERE username = '". $username ."';";

    try {
        $st = $conn->prepare($sql);
        $st->bindValue("username", $username, PDO::PARAM_STR);
        $st->execute();
        $emailAddress = $st->fetch();
        return $emailAddress;
        parent::disconnect($conn);
    } catch(PDOException $e) {
        die("emailAddress lookup query failed: " . $e->getMessage());
    }
}

这返回了一个包含两个元素的数组,两个元素都是正确的电子邮件地址。我将返回语句更改为

    return implode(array_unique($emailAddress)); 
这解决了问题,但必须有更好的方法来做到这一点。这似乎是非常基本的东西,我想把它做好。怎么了?

【问题讨论】:

  • 请贴出样表数据和二元数组
  • 用户名是否有唯一约束?似乎很奇怪,您获得了多行似乎应该是一个唯一字段的内容。
  • 另外,是否已断开连接?我问原因,在你之后return
  • $st->fetch() 返回一个布尔值,这就是您自己的函数返回给调用者的内容,那么您的数组在哪里出现?
  • 用户名确实具有来自 mysql 和用户注册验证的唯一约束。另外,现在只有大约 7 个用户,所以我知道这不是重复问题。

标签: php mysql arrays database


【解决方案1】:

问题是fetch的默认响应类型是

PDO::FETCH_BOTH (默认):返回一个由列名和 0 索引列号索引的数组,如结果集中返回的那样

我也觉得这很混乱。

将参数 fetch_style 指定为 PDO::FETCH_ASSOC 或 PDO::FETCH_OBJ 以获得您期望的结果。

http://php.net/manual/en/pdostatement.fetch.php

希望对你有帮助

【讨论】: