Php PDO将FetchAll结果存储在变量中,而不是直接在foreach中使用

Php PDO将FetchAll结果存储在变量中,而不是直接在foreach中使用,php,pdo,fetchall,Php,Pdo,Fetchall,所以我很好奇。我总是尽量避免创建只使用一次的变量,相反,我尝试直接使用它,除非它是大量文本,例如MySQL查询 我通常是这样做的: $getSomethingSql = 'LONG SQL'; $getSomething = $dbConnection->prepare($getSomethingSql); // or query if no parameters are needed // Some binds etc if needed $getSomething->execut

所以我很好奇。我总是尽量避免创建只使用一次的变量,相反,我尝试直接使用它,除非它是大量文本,例如MySQL查询

我通常是这样做的:

$getSomethingSql = 'LONG SQL';
$getSomething = $dbConnection->prepare($getSomethingSql); // or query if no parameters are needed
// Some binds etc if needed
$getSomething->execute(); // if prepared statements are used
$something = $getSomething->fetchAll(PDO::FETCH_ASSOC);

foreach ($something as $s) {}
现在,$getSomethingSql只使用一次,但作为变量存储,因为它可以是一个长字符串,因此看起来更好。然而,我很好奇使用上面的代码与下面的代码相比是否有任何优势:

$getSomethingSql = 'LONG SQL';
$getSomething = $dbConnection->prepare($getSomethingSql); // or query if no parameters are needed
// Some binds etc if needed
$getSomething->execute(); // if prepared statements are used

foreach ($getSomething->fetchAll(PDO::FETCH_ASSOC) as $s) {}

这两种代码的作用相同吗?是否存在巨大的性能差异,或者其中一个更干净?

在内部,它们会做同样的事情。唯一的区别是,在一种情况下,它将使用显式创建的变量来保存fetchAll的结果,在第二种情况下,它将使用临时变量。

最好使用您自己的类或包装函数-向它传递SQL查询和一些参数,让它运行PDO prepared语句,并使用fetchAll将记录集作为数组返回,然后可以在代码中使用该数组。这样,您就不会编写数据库连接、错误检查等。当更新发生时,您有一个地方可以更新。我正在使用的代码不是我的,它实际上总是包含一个包含数据库连接的配置文件。即使这样,也可以用我上面描述的两种方法来完成,这意味着我仍然想知道相同的方法。