1

因此,我正在尝试获取某门课程的所有评论。例如,它通过 course.php?cID=1563 告诉哪些课程有哪些评论的方式。cID 是执行此区分的标识符。

它不断抛出这个致命错误:致命错误:未捕获的异常 'PDOException' 带有消息'SQLSTATE [23000]:完整性约束违规:1052 列'cID' in where 子句不明确' PDOStatement->execute(Array) #1 throw on line 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。

4

2 回答 2

6

您指的是cID两个表中都存在的列。更新您的查询 ( $sth2) 以仅指向其中一个表,如下所示:

SELECT Co.info, Co.date
    FROM Course C, Comment Co
    WHERE C.cID = Co.cID
    AND C.cID = ?;
于 2011-04-11T00:48:54.980 回答
0

我看不出(从你的问题)为什么你需要参考 Course 表。您返回的数据完全来自 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 图表中的符号的含义有点生疏,但如果一个课程可以有多个评论,您将需要 a fetchAll(), not fetch(),并且需要遍历结果数组。如果每个课程只能有一个评论,您可以将此查询组合到上一个查询中,JOIN并在cID字段上添加一个。

于 2011-04-11T01:09:07.677 回答