gpt4 book ai didi

php - PDO 获取模式 - 查询前/查询后

转载 作者:行者123 更新时间:2023-12-02 17:46:04 25 4
gpt4 key购买 nike

我想知道为什么你可以在执行查询前后设置fetch mode,结果仍然使用给定的fetch mode...?

这意味着 PDO 从数据库服务器检索查询结果作为数字和关联?嗯……

是否可以只取回一个..?是数值结果还是关联结果?

这两个示例返回完全相同的结果。如果我将 setFetchMode 保留在外面,则会打印数字和关联结果

执行前

$sth = $dbh->prepare("SELECT REFERENCED_TABLE_NAME table_name, REFERENCED_COLUMN_NAME column_name\n"
."FROM KEY_COLUMN_USAGE\n"
."WHERE REFERENCED_TABLE_NAME IS NOT NULL && REFERENCED_COLUMN_NAME IS NOT NULL\n"
."GROUP BY REFERENCED_TABLE_NAME, REFERENCED_COLUMN_NAME");
$sth->setFetchMode(PDO::FETCH_ASSOC);
$sth->execute();

echo '<pre>';
foreach($sth as $row){
print_r($row);
}
echo '</pre>';

执行后

$sth = $dbh->prepare("SELECT REFERENCED_TABLE_NAME table_name, REFERENCED_COLUMN_NAME column_name\n"
."FROM KEY_COLUMN_USAGE\n"
."WHERE REFERENCED_TABLE_NAME IS NOT NULL && REFERENCED_COLUMN_NAME IS NOT NULL\n"
."GROUP BY REFERENCED_TABLE_NAME, REFERENCED_COLUMN_NAME");
$sth->execute();
$sth->setFetchMode(PDO::FETCH_ASSOC);

echo '<pre>';
foreach($sth as $row){
print_r($row);
}
echo '</pre>';

最佳答案

您的示例使用了一种简化:在执行之后,但在您可以使用记录之前,您还需要获取它们。这些是 PDOStatement class 中的 fetch 和 fetchAll 方法。 .

但是当使用 foreach 结构时,您使用的是 PDOStatement 的 Traversable 接口(interface),它会在 foreach 循环开始时调用 fetchAll 方法而不是您。

因此在这两个示例中,fetchAll 都会在您设置抓取模式后被调用。

编辑:

That means that PDO retrieve the query result both as numeric and assoc from the db server? Hmm...

PDO 不会以一种或两种方式从数据库中获取记录,它总是以相同的方式进行——不同之处在于它如何将结果呈现给您。如果您指定一个获取模式,PDO 将为您构建请求的结构。如果您使用默认值,或指定 FETCH_BOTH,它将为您构建两个不同的表示,但来自相同的结果集。此参数不会影响发送到 SQL 服务器的命令。

关于php - PDO 获取模式 - 查询前/查询后,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14388415/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com