所以,我正试图获得某一课程的所有评论。它告诉course.php?cID = 1563的哪些评论是哪种方式的方式。 cID是执行此区分的标识符。
它不断抛出这个致命错误:致命错误:未捕获异常'PDOException',消息'SQLSTATE [23000]:完整性约束违规:1052 where子句中的列'cID'不明确'PDOStatement-> execute(阵列#1抛出第42行
(2)表的数据库结构:
PHP:
<?php
// Get course information cID, prefix, code and dept info : name
$cID = filter_input(INPUT_GET, 'cID', FILTER_SANITIZE_NUMBER_INT);
if(!$cID) {
echo "No cID specified.";
exit;
}
$username = "###";
$password = "###";
$pdo2 = new PDO('mysql:host=localhost;dbname=####', $username, $password);
$pdo2->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
$sth2 = $pdo2->prepare('
SELECT Co.info, Co.date
FROM Course C, Comment Co
WHERE C.cID = Co.cID
AND cID = ?;
;');
$sth2->execute(array(
$cID
));
?>
PHP调用上述内容:
<?php
// Did we get any *course detail*
if($sth2->rowCount() > 0) {
$row = $sth2->fetch(PDO::FETCH_ASSOC);
echo "<img class='left' style='margin:5px;' src='img/courseComment.png'/> <p> {$row['info']} </p>";
} else {
echo "No results.";
}
unset($sth2);
?>
为什么会这样?如果有人可以请帮助我解释和修复代码,我将不胜感激。此url也有页面的cID。
答案 0 :(得分:6)
您指的是两个表中都存在的cID
列。更新您的查询($sth2
)以仅指向其中一个表,如下所示:
SELECT Co.info, Co.date
FROM Course C, Comment Co
WHERE C.cID = Co.cID
AND C.cID = ?;
答案 1 :(得分:0)
我没有看到(根据你的问题)为什么你需要引用课程表。您返回的数据完全来自Comment表。我假设你有一个先前的查询来提取课程信息,现在你得到相关的评论。如果这是正确的,那么代码的稍好版本可能是:
$sth2 = $pdo2->prepare('
SELECT Co.info, Co.date
FROM Comment Co
WHERE Co.cID = :id;
');
$sth2->bindParam( ':id', $cID, PDO::PARAM_INT );
$sth2->execute();
我对Visio图表中的符号含义有点生疏,但如果一个课程可以有多个评论,则需要fetchAll()
,而不是fetch()
,并且需要迭代生成的数组。如果每个课程只能有一个评论,则可以将此查询与JOIN
字段中cID
的上一个查询结合使用。