PHP PDO获取null

PHP PDO获取null,php,sql,mysql,pdo,Php,Sql,Mysql,Pdo,如何检查列值是否为空?示例代码: $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_ra

如何检查列值是否为空?示例代码:

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

连接到数据库时,可以设置一些属性,以控制当数据库查询返回空字符串和空字符串时,PDO如何处理它们

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

其中,$选项是以下选项之一:

  • PDO::NULL_NATURAL:无转换
  • PDO::NULL_EMPTY_STRING:将空STRING转换为NULL
  • PDO::NULL_TO_字符串:NULL转换为空字符串

    • 这不是你想做的事情吗

      foreach($row as $r){
      
      if($r->total_rating_votes == null){
      
        //do something
      
      }
      
      实际上,您可能想尝试:

      if($r->total_rating_votes == ""){/*do something*/}
      
      因为php可能已将null值转换为空字符串,然后它实际上不是null,而是“”


      希望这有帮助

      谢谢你的回答。经过一点实验,这段代码解决了我的问题

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

      $row['total_rating_voces']是什么意思包含?$row[“总投票数”];应包含空值,因为提交评分表中不存在任何记录。我已经通过在mysqladmin中运行查询验证了这一点。如果没有记录,那么$row['total_rating_voces']就没有设置。打印($row)。您应该检查execute的返回值,该值将是找到的记录数。是否尝试为空($this->total_rating_voces)?它用于确定变量是否为空。它也适用于空值。