Tengo una duda, en un principio la consulta en la base de datos la hacia de esta manera ...
Código PHP :
<?php
include("script/conexion.php");
$sentencia= $pdo->prepare("SELECT * FROM musica WHERE lanzamiento >=2000 AND lanzamiento <=2009 ORDER BY lanzamiento DESC, title");
$sentencia->execute();
$lista2000 = $sentencia->fetchAll(PDO::FETCH_ASSOC);
$sentencia = $pdo->prepare("SELECT * FROM musica WHERE lanzamiento >=1990 AND lanzamiento <=1999 ORDER BY lanzamiento DESC, title");
$sentencia->execute();
$lista1990 = $sentencia->fetchAll(PDO::FETCH_ASSOC);
$sentencia = $pdo->prepare("SELECT * FROM musica WHERE lanzamiento >=1980 AND lanzamiento <=1989 ORDER BY lanzamiento DESC, title");
$sentencia->execute();
$lista1980 = $sentencia->fetchAll(PDO::FETCH_ASSOC);
Luego como la lista se me hacia muy extensa le adapte un código para mostrar un valor predeterminado...
Código PHP :
$sentencia = $pdo->prepare("SELECT count(*) FROM musica WHERE lanzamiento >=2010 AND lanzamiento <=2019");
$sentencia->execute();
$counter = $sentencia->fetchColumn();
if ($counter > 65) {
$page = 1;
if (array_key_exists('pg', $_GET)) { $page = $_GET['pg']; }
$max_num_paginas = intval($counter / 65);
$sentencia = $pdo->prepare("SELECT * FROM musica WHERE lanzamiento >=2010 AND lanzamiento <=2019 ORDER BY date DESC LIMIT " . (($page) * 65) . ", 65 "); }
else {
$page = 0;
$sentencia = $pdo->prepare("SELECT * FROM musica WHERE lanzamiento >=2010 AND lanzamiento <=2019 ORDER BY date DESC");
}
$sentencia->execute();
$lista2010 = $sentencia->fetchAll(PDO::FETCH_ASSOC);
Todo funciona bien pero como debería pegar el mismo código para todas las consultas se me vino la idea de hacer una función que seria...
Código PHP :
function consulta($num_paginas, $desde, $hasta) {
include("conexion.php");
$decada = $pdo->prepare("SELECT count(*) FROM musica WHERE lanzamiento >= $desde AND lanzamiento <= $hasta ");
$decada->execute();
$counter = $decada->fetchColumn();
if ($counter > $num_paginas) {
$page = 1;
if (array_key_exists('pg', $_GET)) { $page = $_GET['pg']; }
$max_num_paginas = intval($counter / $num_paginas);
$decada = $pdo->prepare("SELECT * FROM musica WHERE lanzamiento >= $desde AND lanzamiento <= $hasta ORDER BY date DESC LIMIT " . (($page) * $num_paginas) . ", $num_paginas ");
}
else {
$page = 0;
$decada = $pdo->prepare("SELECT * FROM musica WHERE lanzamiento >= $desde AND lanzamiento <= $hasta ORDER BY date DESC");
}
$decada->execute();
$lista = $decada->fetchAll(PDO::FETCH_ASSOC);
Y la llamo desde el index
Código PHP :
<?php
include("funciones.php");
consulta(65, 2010, 2019);
consulta(65, 1980, 1989);
consulta(65, 2000, 2009);
consulta(65, 1990, 1999);
?>
65 es la cantidad de lineas que quiero mostrar entre los años seleccionados
Mis problemas o dudas son que al arrancar la función me conecto a la base de datos, hay alguna forma de colocar include("conexion.php"); para que solo se pida una vez?
Código PHP :
function consulta($num_paginas, $desde, $hasta) {
include("conexion.php");
$decada = $pdo->prepare("SELECT count(*) FROM musica WHERE lanzamiento >= $desde AND lanzamiento <= $hasta ");
Repito que el código funciona bien, si bien debo tener algún error porque recién comienzo pero se me hace que no es necesario conectar a la base de datos por cada consulta, si yo pongo el include("conexion.php"); en cualquier otro lados cuando arranca la función me sale que hay un problema con la variable $pdo
Notice: Undefined variable: pdo y también
Fatal error: Uncaught Error: Call to a member function prepare()