tags:

views:

227

answers:

4
+3  Q: 

PHP PDO fetch null

How do you check if a columns value is null? Example code:

$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????
{
...
}
A: 

if($row->column_name){ ...code...}

I would check it like this. Or with the function empty() .

EDIT: I think that the way you are doing you are not accesing well to the data and you are assigning an empty string to the $this->total_rating_votes, so that does not make it null. I guess the way you fetch the data does not convert $row into an array, being $row an object.

Dez
accessing the other values of $row however does work, e.g.$this->exercise_id = $row['exericse_id'];$this->author_id = $row['author_id'];$this->submisison = $row['submission'];$this->result = $row['result'];$this->submission_time = $row['submission_time'];all assign the correct values.
Jacob
-1 for the `empty()` suggestion, `empty(0) === true`, `empty('0') === true`, `strlen()` is a better alternative.
Alix Axel
@Alix Axel, yes you are right, empty would not be the most suitable function here.
Dez
A: 

When you connect to the database, you can set some attributes to control how PDO handles Nulls and Empty Strings when they are returned by the database query

PDO::setAttribute (PDO::ATTR_ORACLE_NULLS, $option )

Where $option is one of the following:

  • PDO::NULL_NATURAL: No conversion.
  • PDO::NULL_EMPTY_STRING: Empty stringis converted to NULL.
  • PDO::NULL_TO_STRING: NULL is converted to an empty string.
Mark Baker
+1  A: 

Isnt it something like that that you want to do?

foreach($row as $r){

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

  //do something

}

Actually you might want to try:

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

Because php might have converted the null value into an empty string, and then it's not actually null, it's ""

Hope this helps!

Piero
A: 

Thanks for all of your answers. After a bit of experimentation this code solved my problem

$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!!!
{
...
}
Jacob