PHP MYSQL 函数有效,但在添加额外参数时中断
PHP MYSQL function works, but breaks when extra parameters are added
下面的代码 return 没什么,但是如果我删除这一行:
'desc' => $row['DESC'],
从函数来看它工作正常。
DESC
是数据库中的有效列,当我 运行 在 phpmyadmin 中进行完整查询时,它 return 是所需的结果。
我不确定为什么要这条线
'desc' => $row['DESC'],
打破结果的return。
=======
经过更多调查,我发现 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;
}
}
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;
}
}
DESC 是一个保留关键字,可以做类似的事情
SELECT DISTINCT NAME, DESC as yourVar, CLASSCODE FROM tbl_subjects WHERE VISIBLE = 1 ORDER BY NAME ASC
然后像那样
'desc' => $row['yourVar'],
$stmt = $db1->query("SELECT DISTINCT `NAME`, `DESC`, `CLASSCODE` FROM `tbl_subjects` WHERE `VISIBLE` = 1 ORDER BY `NAME` ASC");
存在语法错误,因为 desc
是保留关键字,您必须使用引号,最好的习惯是在每一列和每个 table 名称
上加引号
谢谢大家的回答 - 我发现了问题,破坏脚本的是我的 JSON 值中的字符串有几个 -
。
我花了一段时间才找到它:-)
下面的代码 return 没什么,但是如果我删除这一行:
'desc' => $row['DESC'],
从函数来看它工作正常。
DESC
是数据库中的有效列,当我 运行 在 phpmyadmin 中进行完整查询时,它 return 是所需的结果。
我不确定为什么要这条线
'desc' => $row['DESC'],
打破结果的return。
=======
经过更多调查,我发现 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;
}
}
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;
}
}
DESC 是一个保留关键字,可以做类似的事情
SELECT DISTINCT NAME, DESC as yourVar, CLASSCODE FROM tbl_subjects WHERE VISIBLE = 1 ORDER BY NAME ASC
然后像那样
'desc' => $row['yourVar'],
$stmt = $db1->query("SELECT DISTINCT `NAME`, `DESC`, `CLASSCODE` FROM `tbl_subjects` WHERE `VISIBLE` = 1 ORDER BY `NAME` ASC");
存在语法错误,因为 desc
是保留关键字,您必须使用引号,最好的习惯是在每一列和每个 table 名称
谢谢大家的回答 - 我发现了问题,破坏脚本的是我的 JSON 值中的字符串有几个 -
。
我花了一段时间才找到它:-)