2011-01-31 36 views
5

yo soy un poco de un noob- y estoy teniendo un tiempo difícil ...PHP y MySQL de verificación si la tabla está vacía

Necesito un poco de código que busca en una tabla db para encontrar el fila que coincide con la variable $ id. Hay un campo en esa tabla 'descripción' que necesito tomar. Si es nulo, necesito mostrar un mensaje, si no otro. Aquí está el código que tengo (sé que tengo que añadir la cadena mysqli escape, haciendo esto muy rápido de la memoria):

$query = "SELECT description FROM posts WHERE id = $id"; 
$result = mysqli_query($dbc, $query); 

$row = mysqli_fetch_array($result, MYSQLI_ASSOC) ; 

if(!$row){ 
echo "<p>'No description'</p>"; 
} else { 
echo '<p>' . $row['description'] . '</p>'; 
} 
+0

Oh - esto es lo que está haciendo. Devuelve la descripción de cualquier manera, independientemente de los datos en db. – user517593

+0

que faltan algunos puntos y comas y otras cosas así; p –

+0

if ($ fila <= 0) echo 'vacío'; else echo $ row ['description']; Me funciona muy bien. O intente utilizar la función mysql_num_row() para controlar sus resultados. – B4NZ41

Respuesta

11

mysqli_fetch_array será obtener una fila sin tener en cuenta si las columnas en esa fila son nulas. ¿Quieres estar comprobando si $row['description'] se fija en lugar de si $row se establece:

$query = "SELECT description FROM posts WHERE id = $id"; 
$result = mysqli_query($dbc, $query); 

$row = mysqli_fetch_array($result, MYSQLI_ASSOC); 

if(isset($row['description'])) { 
    echo "<p>No description</p>"; 
} else { 
    echo '<p>' . $row['description'] . '</p>'; 
} 

EDIT: O, como alternativa, puede no recuperar filas de la base de datos donde descripción es NULL:

$query = "SELECT description FROM posts WHERE id = $id AND description IS NOT NULL LIMIT 1"; 
$result = mysqli_query($dbc, $query); 

$row = mysqli_fetch_array($result, MYSQLI_ASSOC); 

if(! $row) { 
    echo "<p>No description</p>"; 
} else { 
    echo '<p>' . $row['description'] . '</p>'; 
} 

Ahora que verificaría si fuera capaz de agarrar una fila o no.

+0

No se olvide de 'LIMIT 1' la consulta también, no quiero pasar por toda la tabla una vez que encuentra la fila con la identificación, asumiendo que la identificación es única, por supuesto. – Phoenix

+0

¡esa es la única! increíble. – user517593

+0

@Phoenix gracias, 'añadió LIMIT 1' a su sugerencia. Si – Josh

2

¿Qué tal:

SELECT COUNT(*) FROM table WHERE `description` IS NOT NULL 
+0

Pero me dará una cuenta de cualquier manera. Probé un mysqli_num_rows y haciendo una afirmación como "si == 0, haz esto ... si == 1, haz esto" pero no está verificando lo que hay en el campo, solo que hay uno, así que cada uno devolvió un falso positivo . – user517593

+0

Esto no le ayudará a lograr lo que está pidiendo ... – Josh

+0

Allí, lo arregló para usted ... – Josh

2

El !$row sólo se producirá si se encuentra ningún registro. Si la descripción del campo es realmente null, usted tiene que comprobar de esta manera:

if(is_null($row['description'])){ 

pero recomiendo que compruebe si el valor está vacío (o 0 o nulo):

if(empty($row['description'])){ 
2

Por cierto, que puede hacer el registro de entrada desde dentro de su consulta utilizando COALESCE:

$query = "SELECT COALESCE(description, 'No description') FROM posts WHERE id = $id"; 
$result = mysqli_query($dbc, $query); 

$row = mysqli_fetch_array($result, MYSQLI_ASSOC) ; 
echo $row['description']; 

de esta manera, cuando hay un valor para el campo description, se demostrará lo contrario No description saldrá. De esta manera, puede eliminar la condición if de PHP.

+1

más uno para el código conciso. aunque, si "la descripción es nula" tiene más consecuencias que cambiar la salida, entonces esto es malo. – davogotland

+0

Gracias Sarfaz, yo no sabía eso. – PruitIgoe

+0

@dav: 'COALESCE' detendrá la aparición de mensajes NULL con un mensaje fácil de usar, es esencialmente lo mismo que lo que OP estaba haciendo con PHP :) – Sarfraz

Cuestiones relacionadas