从mysql获取列值时获取未定义的索引

时间:2015-03-11 12:20:03

标签: php mysql

我有以下代码:

$sql = 'select count(*) from match as count where match_status != :status';
      $query = $con->prepare($sql);
      $query->bindValue(':status',LOST,PDO::PARAM_INT);
      $query->execute();
      $row = $query->fetch(PDO::FETCH_ASSOC);

      if(!empty($row))
        $row_count = $row['count'];
      else
        $row_count = 0;

我正在Notice: Undefined index: count

错误是什么?

2 个答案:

答案 0 :(得分:2)

您为错误的内容创建了别名。这应该有效:

SELECT count(*) as count FROM `match` WHERE match_status != :status
                 //^^^^^ Alias for 'count(*)' NOT for your table name

此外,你必须把`围绕关键字/ Mysql保留字,例如matchhttp://dev.mysql.com/doc/refman/5.6/en/reserved-words.html

如果您打开错误模式,那么您也会收到错误,只需在连接后立即执行:

$con->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);  

答案 1 :(得分:2)

$sql = 'select count(*) from match as count where match_status != :status';

在此查询中,as count不会执行任何操作,因为您不知道要重命名的列。
您需要将其直接放在原始列名之后,以便数据库知道它需要隐藏的列名:

$sql = 'select count(*) as count from `match` where `match_status` != :status';

由于这个$row['count']不起作用,因为你没有count-column,只有count(*)列。

N.B。:您使用的是MySQL保留字,match,需要特别注意MySQL。要么将其重命名为其他内容,要么使用它周围的刻度,以便正确地逃避它。