0

PDOはデータを表示していません誰かが私を助けてくれます:

$ClanData_users = sql::db()->prepare('SELECT * FROM clan_game INNER JOIN clan_page ON clan_game.clan_home = clan_page.id ORDER BY clan_game.date ASC');
$ClanData_users->execute();
$q = ($ClanData_users);

$content .= '<table class="forum"><tbody><tr class="bericht-content"><td> Kalender</td></tr>';
while($r = $q->fetch()){
    $content .= '<tr><td><span class="beschrijving"><p> '.$r['clan_game.clan_home'].' '.$r['clan_challenger'].' '.ucfirst(strftime("%A %H <b>%B</b> %Y | %R", strtotime($r['date']))).'  </p></span></td></tr> ';
}
$content .= '</tbody></table>';
4

2 に答える 2

2

通常SELECT *JOINクエリで使用することはお勧めできません。代わりに、必要な列を特定し、名前が重複する場合はそれらにエイリアスを割り当てます。$r['table_name.column_name']after fetchingを介してテーブル名でそれらにアクセスすることはできません。連想列は、列名またはエイリアスによってのみ使用できる$r['column_name']ため、すべての列名/エイリアスは一意である必要があります。

$ClanData_users = sql::db()->prepare('
  SELECT 
    /* If both tables have the same column name, use an alias */
    clan_game.id AS clan_game_id,
    clan_home.id AS clan_home_id,
    clan_game.clan_home AS clan_home,
    clan_challenger,
    /* etc... Be specific and alias as necessary */
  FROM clan_game 
    INNER JOIN clan_page ON clan_game.clan_home = clan_page.id
  ORDER BY clan_game.date ASC');

フェッチするときは、列名またはエイリアスのみを使用します

// Why reference $ClanData_users as $q here? That's confusing. Just fetch from $ClanData_users
while($r = $ClanData_users->fetch(PDO::FETCH_ASSOC)){
    $content .= '<tr><td><span class="beschrijving"><p> '.$r['clan_home'].' '.$r['clan_challenger'].' '.ucfirst(strftime("%A %H <b>%B</b> %Y | %R", strtotime($r['date']))).'  </p></span></td></tr> ';
}
于 2012-10-16T13:36:34.677 に答える
0

$rが false の場合、クエリは成功しませんでした。この時点では、データベース スキーマがないため、コードの何が問題なのかはわかりません。SQL構文は私には問題ないようです。問題の原因を理解する唯一の方法は、PhpMyAdmin 内でクエリを実行してみることです。

于 2012-10-16T14:02:36.887 に答える