2010-05-18 27 views
5

¿Cómo se comprueba si el valor de una columna es nulo? Código de ejemplo:PHP PDO fetch null

$db = DBCxn::getCxn(); 

$sql = "SELECT exercise_id, author_id, submission, result, submission_time, total_rating_votes, total_rating_values 
FROM submissions 
LEFT OUTER JOIN submission_ratings ON submissions.exercise_id=submission_ratings.exercise_id 
WHERE id=:id"; 

$st = $db->prepare($sql); 

$st->bindParam(":id", $this->id, PDO::PARAM_INT); 

$st->execute(); 
$row = $st->fetch(); 

$this->total_rating_votes = $row['total_rating_votes']; 

if($this->total_rating_votes == null) // this doesn't seem to work even though there is no record in submission_ratings???? 
{ 
... 
} 
+2

¿Qué contiene '$ row ['total_rating_votes'];'? –

+0

$ row ['total_rating_votes']; debe contener NULL ya que no existen registros en la tabla submission_ratings. Lo he verificado ejecutando la consulta en mysqladmin. – Jacob

+0

Si no hay registros, entonces $ row ['total_rating_votes'] no está configurado. Haz una print_r ($ fila). Debería verificar el valor de retorno de execute, que será el número de registros encontrados. –

Respuesta

0

Gracias por todas sus respuestas. Después de un poco de experimentación, este código resolvió mi problema

$this->total_rating_votes = $row['total_rating_votes']; 

if(!isset($this->total_rating_votes)) // this is now true if this record had a NULL value in the DB!!! 
{ 
... 
} 
12

Cuando se conecta a la base de datos, se puede establecer algunos atributos para controlar cómo maneja DOP nulos y cadenas vacías cuando son devueltos por la consulta de base de datos

PDO :: setAttribute (DOP: : ATTR_ORACLE_NULLS, opción $)

Donde $ opción es uno de los siguientes:

  • PDO :: NULL_NATURAL: Sin conversión.
  • PDO :: NULL_EMPTY_STRING: cadena vacía convertida a NULL.
  • PDO :: NULL_TO_STRING: NULL se convierte en una cadena vacía.
2

¿No es algo así que quieres hacer?

foreach($row as $r){ 

if($r->total_rating_votes == null){ 

    //do something 

} 

En realidad es posible que desee probar:

if($r->total_rating_votes == ""){/*do something*/} 

Debido php podría haber convertido el valor nulo en una cadena vacía, y luego en realidad no es nula, es ""

Esperanza esta ayuda!