2013-10-09 20 views
9

簡単なクエリを作成していますが、機能していないため、なぜその理由がわかりません。私は最近、データベースへのPDO接続について知り始めました。整合性制約違反:1052 where句の 'id'列が曖昧です

ここにコードされています

  1. 接続は次のとおりです。その後、

    try{ 
        $query = $connect->query("SELECT N.id,N.titulo,N.texto,N.autor,N.data,J.imagem_noticia FROM noticias N JOIN jogo J ON N.jogo_id = J.id WHERE N.publicada =1 ORDER BY N.data DESC LIMIT 4"); 
    }catch(PDOException $erro){ 
        echo $erro->getMessage(); 
    } 
    
    while($dados = $query->fetch(PDO::FETCH_ASSOC)) 
    
    { 
    

しかし:

define("HOST","localhost"); 
define("USER","root"); 
define("PASS","password"); 
define("BASE","portugalforcedb"); 


try{ 
    $conexao = 'mysql:host='.HOST.';dbname='.BASE; 
    $connect = new PDO($conexao, USER, PASS); 
    $connect->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
}catch(PDOException $erro){ 
    echo $erro->getMessage(); 
} 
  • その後、私はこのように動作しますAAクエリを作成別のクエリを別のクエリで作成する

    $id = $_GET['id']; 
        try{ 
        $query = $connect->prepare("SELECT N.id,N.titulo,N.texto,N.autor,N.data,J.imagem_noticia FROM noticias N JOIN jogo J ON N.jogo_id = J.id WHERE N.publicada =1 AND id=numero"); 
        $query->bindParam('numero',$id,PDO::PARAM_INT); 
        $query->execute(); 
    }catch(PDOException $erro){ 
        echo $erro->getMessage(); 
    } 
    
    $dados = $query->fetch(PDO::FETCH_ASSOC); 
    

    と私が試した:このようなページでは動作しないこと

    $id = $_GET['id']; 
        try{ 
        $query = $connect->query("SELECT N.id,N.titulo,N.texto,N.autor,N.data,J.imagem_noticia FROM noticias N JOIN jogo J ON N.jogo_id = J.id WHERE N.publicada =1 AND id=numero"); 
    }catch(PDOException $erro){ 
        echo $erro->getMessage(); 
    } 
    
    while($dados = $query->fetch(PDO::FETCH_ASSOC)) 
    

    をが、その後、このエラーが表示されます。

    SQLSTATE [23000]:整合性制約違反:1052列をwhere節の 'id'はあいまいです

  • +3

    これは、可能な複数のIDフィールドがあるためです.1つはN、もう1つはJです。WHERE句にN.idまたはJ.idを使用してみてください。 – joe42

    答えて

    23

    クエリの最後にid=numero。 idにはテーブルエイリアスが必要です。これはN.idまたはJidでなければなりません

    関連する問題