2010-05-18 42 views
5

Làm thế nào để bạn kiểm tra xem một giá trị cột là null? mã ví dụ: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

'$ row ['total_rating_votes'];' chứa? –

+0

$ row ['total_rating_votes']; nên chứa NULL vì không có bản ghi nào tồn tại trong bảng submission_ratings. Tôi đã xác minh điều này bằng cách chạy truy vấn trong mysqladmin. – Jacob

+0

Nếu không có hồ sơ, thì hàng $ ['total_rating_votes'] chưa được đặt. Thực hiện print_r ($ row). Bạn nên kiểm tra giá trị trả về của thực thi, sẽ là số lượng các bản ghi được tìm thấy. –

Trả lời

0

Cảm ơn tất cả các câu trả lời của bạn. Sau một chút thử nghiệm, mã này đã giải quyết được sự cố của tôi

$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

Khi bạn kết nối với cơ sở dữ liệu, bạn có thể thiết lập một số thuộc tính để kiểm soát cách PDO xử lý Nulls và Strings rỗng khi chúng được trả về bởi các truy vấn cơ sở dữ liệu

PDO :: setAttribute (PDO: : ATTR_ORACLE_NULLS, $ tùy chọn)

đâu $ tùy chọn là một trong những điều sau đây:

  • PDO :: NULL_NATURAL: Không chuyển đổi.
  • PDO :: NULL_EMPTY_STRING: Chuỗi rỗng được chuyển đổi thành NULL.
  • PDO :: NULL_TO_STRING: NULL được chuyển thành một chuỗi trống.
2

Bạn có muốn làm điều gì đó giống như bạn muốn làm không?

foreach($row as $r){ 

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

    //do something 

} 

Trên thực tế bạn có thể muốn thử:

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

Vì php có thể chuyển đổi các giá trị null vào một chuỗi rỗng, và sau đó nó không thực sự null, đó là ""

Hy vọng điều này giúp!