1

だから、私は特定のコースのすべてのコメントを取得しようとしています。どのコースにどのコメントがあるかを示す方法は、たとえば course.php?cID=1563 です。cID は、この区別を行う識別子です。

この致命的なエラーをスローし続けます: Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[23000]: Integrity constraint violation: 1052 Column 'cID' in where clause is ambiguous' PDOStatement->execute(Array) #1 throw on line 42

(2) テーブルの DB 構造: テーブル

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次のように、クエリ ( ) を 1 つのテーブルのみを指すように更新します。

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 グラフの記号が何を意味するのかについては、少しさびていますが、1 つのコースに対して複数のコメントが存在する可能性がある場合は、fetchAll()ではなくfetch()が必要であり、結果の配列を反復処理する必要があります。コースごとにコメントが 1 つしかない場合は、このクエリを前のクエリにJOINフィールドにcIDを付けて組み合わせることができます。

于 2011-04-11T01:09:07.677 に答える