PHP MYSQL函数可以工作,但是在添加额外参数时会中断

时间:2015-02-11 07:27:28

标签: php mysql sql function pdo

以下代码不会返回任何内容,但如果我删除此行:

'desc'          => $row['DESC'],

从功能上它可以正常工作。

DESC是数据库中的有效列,当我在phpmyadmin中运行完整查询时,它会返回所需的结果。

我不知道为什么这一行

'desc'          => $row['DESC'],

打破了结果的返回。

=======

经过更多调查后,我可以看到JSON输出具有相同的问题。 更改列名称(因为DESC是关键字)并反映查询中的更改无效。

======

function get_all_subjects($db1) {
    $stmt = $db1->query("SELECT DISTINCT NAME, DESC, CLASSCODE FROM tbl_subjects WHERE VISIBLE = 1 ORDER BY NAME ASC");
    $stmt->execute();
    $count = $stmt->rowCount();

    $column = array();

    if ($count >0)
    {
        while($row = $stmt->fetch(PDO::FETCH_ASSOC)) 
        {
            $column[] = array(
                        'name'          => $row['NAME'],
                        'desc'          => $row['DESC'],
                        'cc'            => $row['CLASSCODE']
                        );
        }

        return json_encode(array('subjects' =>$column)); 
    }
    else
    {
        return $count;
    }
}

4 个答案:

答案 0 :(得分:3)

DESC是SQL中的保留字。如果要将其用作列,则应使用前向引号保护它:

function get_all_subjects($db1) {
    $stmt = $db1->query("SELECT DISTINCT NAME, `DESC` AS D, CLASSCODE FROM tbl_subjects WHERE VISIBLE = 1 ORDER BY NAME ASC");
    $stmt->execute();
    $count = $stmt->rowCount();

    $column = array();

    if ($count >0)
    {
        while($row = $stmt->fetch(PDO::FETCH_ASSOC)) 
        {
            $column[] = array(
                        'name'          => $row['NAME'],
                        'desc'          => $row['D'], // Using the alias, just in case
                        'cc'            => $row['CLASSCODE']
                        );
        }

        return json_encode(array('subjects' =>$column)); 
    }
    else
    {
        return $count;
    }
}

答案 1 :(得分:0)

DESC是一个保留的关键字,类似于

SELECT DISTINCT NAME, DESC as yourVar, CLASSCODE FROM tbl_subjects WHERE VISIBLE = 1 ORDER BY NAME ASC

然后喜欢那个

'desc'          => $row['yourVar'],

答案 2 :(得分:0)

$stmt = $db1->query("SELECT DISTINCT `NAME`, `DESC`, `CLASSCODE` FROM `tbl_subjects` WHERE `VISIBLE` = 1 ORDER BY `NAME` ASC");

存在语法错误,因为desc是保留关键字,您必须使用引号,最好的habbit引用每列和每个表名

答案 3 :(得分:0)

谢谢大家的回答 - 我发现问题以及破坏脚本的原因是我的JSON值中的字符串中有多个-

我花了一段时间才找到它:-)