我在一个模拟书店网站上工作,我必须运行一个MySQL数据库的查询,我有一个任务,并使用PHP从数据库中的信息构建网页。
其中一个页面列出了所有的书以及过滤器类型的链接,这给了我一些问题。我的服务器上有2个存储过程,我的PHP代码用来构建这个页面。下面是相关的代码:
<?php
/*
username, password, and server name declarations up here
*/
$sqlConnection = new mysqli($servername, $username, $password, 'volga_db');
// Check connection
if ($sqlConnection->connect_error)
{
die("Connection failed: " . $sqlConnection->connect_error);
}
$query = "call getAllBooks();"; // Stored procedure to get a list of all books and information relating to them
$query .= "call getAllGenres();"; // Stored procedure to get a list of all genres and their IDs
if ($sqlConnection->multi_query($query))
{
$bookResultSet = $sqlConnection->store_result();
while ($sqlConnection->more_results())
{
$sqlConnection->next_result();
$genreResultSet = $sqlConnection->store_result();
}
}
else
{
echo "Error executing queries: " . $sqlConnection->error;
}
?>
值得注意的是:如果我注解掉所有与multi_query
相关的代码,并单独调用任何一个存储过程,查询功能就像预期的那样,当我在Web浏览器上打开页面时,我可以直观地看到这一点。此外,我的网页上根本没有“Error executing queries”,这表明multi_query
返回的值是true
我试着用几种不同的形式编写代码,如下所示:
$bookResultSet = $sqlConnection->query("call getAllBooks()");
$genreResultSet = $sqlConnection->query("call getAllGenres()");
$query = "call getAllBooks();";
$query .= "call getAllGenres();";
$combinedResultSet = $sqlConnection->multi_query($query);
$bookResultSet = $sqlConnection->store_result();
$genreResultSet = $sqlConnection->next_result();
...和上面的大片段,但是无论我如何编写代码,我总是得到相同的错误:Fatal error: Uncaught Error: Call to a member function fetch_assoc() on bool in C:\...\shop.php:73 Stack trace: #0 {main} thrown in C:\...\shop.php on line 73
我还尝试了反转$bookResultSet
和$genreResultSet
,有趣的是,当这种情况发生时,会发生反转,其中$genreResultSet
显示正常,而$bookResultSet
在尝试调用fetch_assoc()
时抛出错误
总而言之,我已经做了大量的研究,并尝试了许多不同的解决方案,我已经在互联网上找到,但还没有能够找到任何给我至少一个不同的错误消息。
1条答案
按热度按时间fkaflof61#
已解决:我发现存储过程返回多集。我通过清除每个后续结果集来解决此问题,如下所示: