28

我没有尝试使用循环。我只是从一列的一列中提取一个值。我用下面的代码得到了我想要的东西,但必须有一种更简单的方法来使用 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;

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

4

3 回答 3

62

您可以使用fetchColumn()

$q= $conn->prepare("SELECT name FROM `login_users` WHERE username=?");
$q->execute([$userid]);
$username = $q->fetchColumn();
于 2014-12-01T00:41:31.223 回答
20

您可以为此创建一个函数,并在每次需要单个值时调用该函数。出于安全原因,请避免连接字符串以形成 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]); 

它会给你带来想要的价值。

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

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

于 2012-08-13T05:04:20.647 回答
1

就像你必须上车,开车去商店,在人群中奋力前行,拿起你需要的那一罐牛奶,然后奋力回家,这样你就可以喝奶昔了。

所有这些阶段都是必要的,并且每个后续步骤都取决于之前已执行的步骤。

如果您重复执行此操作,那么一定要围绕它包装一个函数,以便您可以重用它并将其减少到一个getMyValue()调用 - 但在后台所有代码仍然必须存在。

于 2012-08-13T04:29:18.103 回答