1

$stmt->store_result()执行准备好的语句后尝试使用时遇到问题。手册说“从准备好的语句传输结果集”,但是到哪里呢?

理想情况下,我想使用它,一切都很好,并且在内存中缓冲,就像$mysqli->query()返回一样。

PHP 文档示例使它看起来唯一的好理由store_result()是获取行数。

理想情况下,我需要一些可以从准备好的语句中获取整个结果集并对其执行类似 fetch_rows 的操作。mysqli_stmt我确实通过扩展它并使用一些向后的方法添加一个函数来破解该类fetch_assoc,但如果我可以将所有数据缓冲到内存中,我真的很想删除该破解。

所以我想我的简短问题是,我知道是什么store_result(),但你如何使用它?

(老实说,我什$mysqli->prepare()至不会使用 stmt,如果它在防止 SQL 注入攻击、消毒变量以及使我的 SQL 看起来如此漂亮和漂亮的所有这些问号方面没有那么有用的话。)

4

1 回答 1

0

唯一store_result()能做的就是将结果从 MySQL 移动到 PHP 内存中。它不是很有用,因为您仍然需要将结果提取到 PHP 变量中。

您正在寻找的是get_result(). 该函数将从 MySQL 获取结果并将它们存储在 PHP 内存中,另外返回一个熟悉的mysqli_result对象。

$stmt = $mysqli->prepare('SELECT ? as col');
$stmt->bind_param('s', $variable);
$stmt->execute();

// returns mysqli_result object
$result = $stmt->get_result();

// loop to get associative rows
foreach ($result as $row) {
    echo $row['col'];
}
于 2020-08-07T19:26:38.377 回答