mysqli_result - PHP MySQL Query of view devuelve 0 resultados cuando debería haber un resultado
select php mysql consulta (2)
Creo que solo necesitas cambiar los lugares de ejecución y enlace.
...
} else {
$stmt->execute();
$stmt->bind_result($id, $page_title);
$stmt->store_result();
$stmt->fetch();
}
...
Tengo un sitio que ejecuta PHP 5.6. La base de datos para el sitio se actualizó recientemente de MySQL 5.1 a MariaDB 10.0 (compatible con MySQL 5.5) y ahora una consulta en mi sitio no funcionará (y estaba funcionando sin error al conectarse a la base de datos MySQL 5.1.
Para esta demostración, tengo una tabla de base de datos llamada "contenido" con los campos "id" (entero) y "page_title" (var_char). En esa tabla hay dos filas, una con una ID de 1 y un título de página de "Prueba 1", y la segunda fila tiene una ID de 2 y un título de página establecido en "Prueba 2".
Luego creé una vista de esta tabla usando la siguiente consulta dentro de phpMyAdmin:
select `content`.`id` AS `id`,`content`.`page_title` AS `page_title` from `content`
Puedo ver la vista y ambas filas de la tabla de contenido en la vista en phpMyAdmin.
En mi página PHP, tengo una consulta de estilo orientada a objetos. Ese código es:
<?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();
}?>
Esta consulta devuelve lo siguiente: Intenta leer una fila mientras no haya ningún conjunto de resultados asociado con la declaración
Si cambio la tabla de VIEW "v_content" a solo la tabla "content", obtengo un resultado. Además, si utilizo la misma consulta (consultar VIEW v_content) y me conecto a una base de datos MySQL 5.1, obtengo resultados. Sé que no hay nada de malo con la consulta en sí, ya que he copiado y pegado la consulta en phpMyAdmin y he tenido resultados devueltos, y el mismo código fue utilizado en una base de datos MySQL 5.1 y que arrojó resultados. Revisé los registros de errores y no se muestran errores.
¿Alguien tiene alguna idea de lo que podría estar causando que obtenga 0 resultados devueltos de la vista?
Parece que después de todo, no había ningún problema en mi parte con la codificación real del sitio. La empresa de alojamiento me dio la siguiente explicación:
Parece que el problema con las declaraciones preparadas que funcionaban incorrectamente con las vistas se relacionaba con el tamaño de table_definition_cache en los nuevos servidores de bases de datos maria. Esta es una configuración global, y esencialmente, si el número de tablas colocadas en la memoria caché excede este valor, comienza a vaciar las entradas antiguas de la memoria caché. Parece que si se prepara una declaración, pero las entradas salen de la table_definition_cache antes de que se ejecute la declaración preparada, se considera "inválida" y debe volverse a preparar. Como este es un valor global, el acceso a otras tablas puede restablecer su contador. Como resultado, aumentamos el valor de table_definition_cache a un valor mucho más alto en todos los servidores de bases de datos, lo que ha resuelto el problema.