View 的PHP MySQL查询在应该有结果时返回0结果

标签 php mysqli mariadb

我有一个运行 PHP 5.6 的站点。该站点的数据库最近从 MySQL 5.1 升级到 MariaDB 10.0(与 MySQL 5.5 兼容),现在我的站点上的查询将无法运行(并且在连接到 MySQL 5.1 数据库时它可以正常运行。

对于这个演示,我有一个名为“content”的数据库表,其中包含字段“id”(整数)和“page_title”(var_char)。该表中有两行 - 一行的 ID 为 1,page_title 为“Test 1”,第二行的 ID 为 2,page_title 设置为“Test 2”。

然后我在 phpMyAdmin 中使用以下查询创建了该表的 View :

select `content`.`id` AS `id`,`content`.`page_title` AS `page_title` from `content`

我可以在 phpMyAdmin 的 View 中看到 View 和内容表中的两行。

在我的 PHP 页面上,我有一个面向对象的查询。该代码是:

<?php
try {
require_once 'Connections/dbconn.php';
$sql = "SELECT id, page_title FROM v_content WHERE id = 1 LIMIT 1";
$stmt = $db->stmt_init();
if (!$stmt->prepare($sql)) {
    $error = $stmt->error;
} else {
    $stmt->bind_result($id, $page_title);
    $stmt->execute();
    $stmt->store_result();
    $stmt->fetch();
}
} catch (Exception $e) {
$error = $e->getMessage();
}?>

此查询返回以下内容:在没有与该语句关联的结果集时尝试读取一行

如果我将表格从 VIEW“v_content”更改为表格“content”,我会返回一个结果。此外,如果我使用相同的查询(查询 VIEW v_content)并连接到 MySQL 5.1 数据库,我会得到返回的结果。我知道查询本身没有任何问题,因为我已将查询复制并粘贴到 phpMyAdmin 中并返回了结果,并且在 MySQL 5.1 数据库上使用了完全相同的代码并返回了结果。我检查了错误日志,没有显示任何错误。

有人知道是什么导致我从 View 返回 0 个结果吗?

最佳答案

毕竟,网站的实际编码对我来说没有问题。托管公司给了我以下解释:

看来,准备好的语句无法正确处理 View 的问题与新 maria 数据库服务器上的 table_definition_cache 大小有关。这是一个全局设置,本质上,如果放入缓存的表数超过此值,它就会开始将较旧的条目从缓存中清除。看起来,如果准备了一条语句,但条目在执行准备好的语句之前离开了 table_definition_cache,则它被认为是“无效的”,需要重新准备。由于这是一个全局值,访问其他表可以重置其计数器。因此,我们在所有数据库服务器上将 table_definition_cache 的值增加到一个更高的值,从而解决了该问题。

关于 View 的PHP MySQL查询在应该有结果时返回0结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33485149/

相关文章:

php - 如果成员不再属于组,则从数据库中删除行

php - 转义冒号(:) in a PDO prepared statement

mysql - 为什么mariaDB数据库服务器中有三个root用户?

mysql - 将 SQL 查询从 Postgres 移动到 MariaDB 时出错

php - Facebook 注册和登录 Slim Framework PHP API

php - 需要从不存在某些条件的 MySQL 表中获取值

php - mysqli bind_param() fatal error

PHPExcel 不使用 php 显示所有行

php - PDO INSERT 语句在计数器循环内不起作用

javascript - PHP 和 AJAX : How to append json_encode data to multiple unique IDs <DIV>'s?