El primer valor de mi matriz PHP se devuelve como 'nulo' cuando tiene un valor

Realmente me gustaría algo de ayuda con el siguiente problema de MySQL / PHP (¿tal vez un error?)

Estoy tratando de recuperar y mostrar una matriz de datos de mi base de datos usando MySQL / PHP, pero cuando hago eco de la matriz, devuelve el primer valor como 'nulo'.

Entonces, aunque la base de datos tiene la siguiente información:

"Example 1", "Example 2", "Example 3"...

El php hace eco:

"null", "Example 2, "Example 3"

Me imagino que este sería un problema común, pero no he logrado encontrar la información requerida en ningún otro lugar de Internet, por lo que espero que sus amables personas puedan ayudar.

Mi PHP

/* If connection to database, run sql statement. */
if ($conn) {
    $fetch = mysql_query("SELECT column FROM table WHERE approved = '1' ");

    // declare empty array to fill later
    $result = array();

    // make sure the MySQL pointer is looking at the first row
    mysql_data_seek($fetch, 0);


    while ($row = mysql_fetch_array($fetch, MYSQL_ASSOC)) {

        foreach ($row as $value) {

            $row_array = $value;

            // push info into new array with just the value
            array_push($result, $row_array);
        }
    }
}
/* Free connection resources. */
mysql_close($conn);

/* Toss back results as json encoded array. */
echo json_encode($result);

ACTUALIZACIÓN

Nuevo código cortesía de mark B:

if ($conn)
{
$sql = "SELECT column_name FROM table WHERE comment_approved = '1' "; 
$query = mysql_query($sql) or die(mysql_error());

$result = array();
while ($row = mysql_fetch_assoc($query)) {
    $result[] = $row['column_name'];

}

}

/* Free connection resources. */
mysql_close($conn);

/* Toss back results as json encoded array. */
echo json_encode($result);

NOTA:

El problema 'nulo' todavía ocurre con o sin:

 mysql_data_seek($fetch, 0);

ya que parece no hacer nada.

Cualquier ayuda sería genial!

Resuelto

Gracias a mark B quien señaló que el problema probablemente estaba en la base de datos en lugar de PHP, resultó que estaba el carácter 'acechando donde debería haber habido un'. Esto provocó que la información pareciera "nula".

preguntado el 16 de mayo de 11 a las 19:05

¿Por qué usas buscar? ya está en 0 al principio? y si, usa or die(mysql_error()); -

No creo que necesite la función mysql_data_seek (), ya que mysql_query () debería devolver el conjunto de resultados con el puntero en 0 ya. Realmente solo debería necesitar eso si está reutilizando el mismo conjunto de datos después de iterar a través de él (como si estuviera en su ciclo while). -

3 Respuestas

$sql = "SELECT column FROM table WHERE approved = '1'";
$result = mysql_query($sql) or die(mysql_error());

$data = array();
while($row = mysql_fetch_assoc($result)) {
    $data[] = $row['column'];
}

echo json_encode($data);

No debería tener que hacer la búsqueda, ya que no ha hecho nada con el resultado en ese momento. Y dado que solo está obteniendo una sola columna de la base de datos, tampoco es necesario el bucle foreach () interno.

contestado el 16 de mayo de 11 a las 23:05

+1 por escribir lo que iba a escribir y ahorrarme la escritura. - Nils Luxton

Muchas gracias por tu entrada, probé el código anterior y también eliminé el 'buscar', pero sigo obteniendo los mismos resultados. - esohurtabit

Es posible que desee ver los datos en la base de datos. Ejecute la consulta manualmente en el monitor mysql. PHP no creará una entrada nula a menos que los datos salgan de la consulta con un nulo. - Marc B

Estoy en PHPMyAdmin, al ejecutar la consulta SQL anterior se obtienen 10 resultados, todos los cuales tienen la información correcta, sin embargo, cuando se ejecuta en el sitio web, se obtienen 10 resultados, pero el primero es 'nulo'. : / - esohurtabit

¿De qué tipo de datos estamos hablando aquí? Aparte de los blobs demasiado grandes y posiblemente el texto Unicode que está dañado, no puedo pensar en nada que pueda causar que mysql y / o php conviertan los datos de un campo en "nulos" en algo tan simple. - Marc B

Intente eliminar la llamada a mysql_data_seek. No veo ninguna razón por la que el puntero MySQL no apunte a la primera fila en la primera llamada a mysql_fetch_array.

contestado el 16 de mayo de 11 a las 23:05

Podría intentar eliminar mysql_data_seek ($ fetch, 0); ya que el puntero ya estará en el primer registro si acaba de realizar la consulta.

contestado el 16 de mayo de 11 a las 23:05

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.