从数据库中使用MySQL PHP PDO返回一个值

31

我不想使用循环,只需从一行中的一列获取一个值。我用下面的代码得到了我想要的结果,但肯定有更简单的方法使用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;

这看起来只是为了从数据库中获取一个值而写了太多代码。:\

3个回答

68

您可以使用fetchColumn()

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

21
您可以创建一个函数,并在需要单个值时调用该函数。出于安全原因,请避免连接字符串以形成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]); 
并且这将会给你所需的值。因此,你只需要创建这个函数一次,但可以在不同的查询中重复使用它。这个答案已经通过社区编辑以解决安全问题。

12
使用串接字符串来构建数据库查询是很危险的。更好的方式是使用PDO预处理语句。 - bdsl
3
兄弟,使用预处理查询吧,即使只是一个例子。初学者可能会复制这个! - Benni
1
即使进行了编辑,这仍然是一个糟糕的答案。$conn 是从哪里来的? - miken32
我能否编辑您的答案,使其更安全和更简洁? - Your Common Sense
@YourCommonSense,你不必征得其他用户的许可就可以编辑他们的答案。如果你觉得有必要并且愿意改进它,那么你是自由的。 - jirig

0

就像不得不开车去商店,挤过人群,拿到你需要的牛奶,再回家做奶昔一样,这太费力了。

所有这些步骤都是必要的,每个后续步骤都依赖于之前的步骤已经完成。

如果您反复执行此操作,则可以将函数封装起来以便重用,并将其缩减为单个getMyValue()调用 - 但在后台,所有代码仍然必须存在。


3
所有这些阶段都是必要的。 不,它们并非都是必要的。你应该步行去商店。;-) - liamvictor
我意识到那是一个不同的时代,但这只是一条评论。 - miken32

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接