consulta mysql esconde el primer registro

  • Autor Autor satanson
  • Fecha de inicio Fecha de inicio
Estado

🔒 Este tema está cerrado para nuevas respuestas.

⏰ Solo el creador del tema puede solicitar la reapertura de sus propios temas, pero únicamente dentro de los 60 días previos a la última actualización.

satanson

satanson

Gamma
Verificado
Verificación en dos pasos activada
Verificado por Whatsapp
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
Hola amigos, tengo un pequeño inconveniente con una consulta en php no se por que no me sale el primer registro, si hago la consulta de esta manera
PHP:
$sql = "Select * From post WHERE user_name = '$user_name' and privado = 0 and list = 0 ORDER BY dateposted DESC LIMIT ".$inicio.",10";
cuando aparece la lista, si son 3 solo me salen 2 la primera linea no aparece.
 
Hola @satanson dos cosas:
1. ¿Que valor tiene $inicio? Intenta que sea 0.
2. Estás incurriendo en una mala práctica en tu implementación, se presta para inyección SQL, te recomiendo revisar la implementación con PDO
o con MySQLi
 
Hola @satanson dos cosas:
1. ¿Que valor tiene $inicio? Intenta que sea 0.
2. Estás incurriendo en una mala práctica en tu implementación, se presta para inyección SQL, te recomiendo revisar la implementación con PDO
o con MySQLi
Este es el codigo completo, y el ultimo registro no me sale.
PHP:
                $inicio = 0;
                    $sql = "Select * From post WHERE user_name = '$user_name' and privado = 0 ORDER BY dateposted DESC LIMIT ".$inicio.",10";
               
                if (!$pedir = $mysqli->query($sql)){
                    echo 'Fallo al consultar la base de datos.<br>';
                    echo 'Errno: ' . addslashes ($mysqli->errno).'<br>';
                    echo 'Error: ' . addslashes ($mysqli->error).'<br>';
                    exit;
                }
 
¿Seguro que la condición user_name = '$user_name' and privado = 0 está bien?
¿Que te devuelve si le quitas el LIMIT?
 
¿Seguro que la condición user_name = '$user_name' and privado = 0 está bien?
¿Que te devuelve si le quitas el LIMIT?
Si le quito el LIMIT me devuelve todo lo que tengo en la base de datos, menos la primera linea de arriba abajo. No importa si es ASC o DESC siempre se come el primero.
 
Si le quito el LIMIT me devuelve todo lo que tengo en la base de datos, menos la primera linea de arriba abajo. No importa si es ASC o DESC siempre se come el primero.
En la consulta directo a la BD qué te sale?
 
Si le quito el LIMIT me devuelve todo lo que tengo en la base de datos, menos la primera linea de arriba abajo. No importa si es ASC o DESC siempre se come el primero.
entonces es el where
 
entonces es el where
En el where, si coloco el ID del user o el nombre pasa lo mismo. Les voy a dejar el codigo completo con el while.
PHP:
<table class="table">
                  <thead>
                    <tr>
                      <th>Titulo/Nombre</th>                     
                      <th>Creado</th>
                      <th>Views</th>                 
                    </tr>
                  </thead>
                  <tbody>               
                <?php
                    $inicio = 0;
                    $sql = "Select * From post WHERE user_name = '$user_name' and privado = 0 ORDER BY dateposted DESC LIMIT ".$inicio.",10";
                
                if (!$pedir = $mysqli->query($sql)){
                    echo 'Fallo al consultar la base de datos.<br>';
                    echo 'Errno: ' . addslashes ($mysqli->errno).'<br>';
                    echo 'Error: ' . addslashes ($mysqli->error).'<br>';
                    exit;
                }               
            
                if ($uri_mode){
                    $func = 'b10tobstr';
                } else {
                    $func = 'doNoThing';
                }
                
                if($pedir->fetch_assoc() != null){
                while($fila = $pedir->fetch_assoc()) {
                if(strlen($fila['Titulo']) > 30){ $titulosh = mb_substr( $fila['Titulo'], 0, 30 ).'...';}else{$titulosh=$fila['Titulo'];}
                $dateposted = $fila['dateposted'];
                $timestamp = strtotime($dateposted);
                $meses = array("Ene","Feb","Mar","Abr","May","Jun","Jul","Agost","Sept","Oct","Nov","Dic");
                $dateposted = date('d', $timestamp)."/".$meses[date('n')-1]. "/".date('Y', $timestamp) ;
                ?>
                <tr>
                <td class="col-sm-5"><a data-bs-toggle="tooltip" data-bs-placement="left" title="<?=$fila['Titulo']?>" href=".?v=<?=$func($fila['postID'])?>"><?=$titulosh?></a></td>
                <td class="col-auto"><?=$dateposted?></td>
                <td class="col-auto"><?=$fila['views']?></td>
                </tr>
                <?php } }else{ ?>
                <tr scope="row">
                <td colspan="4">
                <div class="mb-2 p-2 rounded alert alert-warning" role="alert"><i class="fa fa-exclamation-triangle" aria-hidden="true"></i> Aún no tienes ningun post</div>
                </td>
                </tr>
                <?php } ?>
                </tbody>
                </table>
 
haz hardcode de tu consulta mysql, luego intenta agregar poco a poco las variables, si no te funciona con hardcode entonces es la consulta
 
haz hardcode de tu consulta mysql, luego intenta agregar poco a poco las variables, si no te funciona con hardcode entonces es la consulta
No es por parecer novato, pero no se como se hace con hardcode. Puedes darme un ejemplo? disculpa mi ignorancia.
 
Select * From post WHERE user_name = 'valorreal' and privado = 0 and list = 0 ORDER BY dateposted DESC LIMIT 0,10

Prueba eso directamente en tu phpmyadmin/mysql si te sale lo que quieres entonces el problema es las variables y la concatenaciòn o cualquier otra cosa, sino, es tu consulta.
 
Select * From post WHERE user_name = 'valorreal' and privado = 0 and list = 0 ORDER BY dateposted DESC LIMIT 0,10

Prueba eso directamente en tu phpmyadmin/mysql si te sale lo que quieres entonces el problema es las variables y la concatenaciòn o cualquier otra cosa, sino, es tu consulta.
Pues si sale lo que quiero, demonios. La consulta esta bien, por que es la misma. Que sera.
 
es el while... me volvía loco siempre con eso... desde hace años saco todo por foreach
 
es el while... me volvía loco siempre con eso... desde hace años saco todo por foreach
Si pero con foreach es igual, lo extraño del caso que tengo esta consulta:
PHP:
$consul1 = "SELECT * FROM post WHERE user_id = '$userID' ORDER BY postID DESC";

Y anda muy bien. Solo tengo problema con esa loop.
 
Si pero con foreach es igual, lo extraño del caso que tengo esta consulta:
PHP:
$consul1 = "SELECT * FROM post WHERE user_id = '$userID' ORDER BY postID DESC";

Y anda muy bien. Solo tengo problema con esa loop.

la consulta está bien... hazme caso... los while y los do while se comen el primer registro... montalo sobre un for o un foreach y funcionará
 
la consulta está bien... hazme caso... los while y los do while se comen el primer registro... montalo sobre un for o un foreach y funcionará
Si pero si, lo pongo asi:
PHP:
foreach ($fila as $pedir->fetch_assoc()) {
Igual no sale el primer registro.
 
no uses fetch_assoc(), haz un foreach sobre el array del resultado de la consulta
 
Estado

🔒 Este tema está cerrado para nuevas respuestas.

⏰ Solo el creador del tema puede solicitar la reapertura de sus propios temas, pero únicamente dentro de los 60 días previos a la última actualización.

Atrás
Arriba