使用 mysql php pdo 从数据库返回一个值

2022-08-30 15:28:17

我不尝试使用循环。我只是从一行的一列中取一个值。我通过以下代码得到了我想要的东西,但是必须有一种更简单的PDO方法。

try {
        $conn = new PDO('mysql:host=localhost;dbname=advlou_test', 'advlou_wh', 'advlou_wh');
        $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    } catch(PDOException $e) {
        echo 'ERROR: ' . $e->getMessage();
    }

$userid = 1;

$username = $conn->query("SELECT name FROM `login_users` WHERE username='$userid'");
$username2 = $username->fetch();
$username3 = $username2['name'];

echo $username3;

这看起来就像是太多行,无法从数据库中获取一个值。:\


答案 1

您可以使用 :fetchColumn()

$q= $conn->prepare("SELECT name FROM `login_users` WHERE username=?");
$q->execute([$userid]);
$username = $q->fetchColumn();

答案 2

您可以为此创建一个函数,并在每次需要单个值时调用该函数。出于安全原因,请避免串联字符串以形成 SQL 查询。相反,请对值使用预准备语句,并对 SQL 字符串中的其他所有内容进行硬编码。为了获取某个列,只需在查询中显式列出它即可。方法也很方便,可以从查询中获取单个值fetchColumn()

function getSingleValue($conn, $sql, $parameters)
{
    $q = $conn->prepare($sql);
    $q->execute($parameters);
    return $q->fetchColumn();
}

然后,您可以简单地执行以下操作:

$name = getSingleValue($conn, "SELECT name FROM login_users WHERE id=?", [$userid]); 

它将为您提供所需的价值。

因此,您只需创建该函数一次,但可以将其重用于不同的查询。

此答案已经过社区编辑,以解决安全问题


推荐