2009-11-26 5 views
0

У меня есть таблица cms_page, в которой каждая страница имеет идентификатор. Я хочу, чтобы вытащить всю информацию из этой таблицы и всю информацию из таблицы cms_page_part где page_id равно идентификатору я отправить на страницу ... запутанным я знаю, но вот моя попытка:PHP PDO MYSQL JOIN

require '../../config.php'; 
$conn = new PDO(DB_DSN, DB_USER, DB_PASS); 

$id = (int)$_GET['id']; 
//$q = $conn->query("SELECT * FROM cms_page WHERE id=$id"); 
$q = $conn->query("SELECT cms_page.id, cms_page.title, cms_page.slug, cms_page_part.* FROM cms_page LEFT JOIN cms_page_part ON cms_page_part.page_id=cms_page.id WHERE cms_page.id = $id"); 

$project = $q->fetch(PDO::FETCH_ASSOC); 

Любая помощь выяснение того, как присоединиться к ним, будет оценено по достоинству.

ответ

2

Как соединить две таблицы:

SELECT id, title, slug, cms_page_part.* FROM cms_page JOIN cms_page_part ON cms_page.id = cms_page_part.page_id WHERE cms_page.id=$id 

пример того, что я сказал в своем комментарии:

// Connect to database 
$conn = new PDO(DB_DSN, DB_USER, DB_PASS); 

// Page ID 
$id = (int) $_GET['id']; 

// Fetch page 
$pageStmt = $conn->query(sprintf('SELECT * FROM cms_page WHERE id=%d', $id)); 
if ($pageStmt->fetchColumn() != 0) { 
    $page = $pageStmt->fetch(PDO::FETCH_ASSOC); 

    // Fetch parts 
    $partsStmt = $conn->query(sprintf('SELECT * FROM cms_page_parts WHERE page_id=%d', $id)); 
    while ($part = $partsStmt->fetch(PDO::FETCH_ASSOC)) { 
     // ... 
    } 
    $partsStmt->closeCursor(); 
} 
$pageStmt->closeCursor(); 

Пример (с подготовленными операторами):

// Connect to database 
$conn = new PDO(DB_DSN, DB_USER, DB_PASS); 

// Page ID 
$id = (int) $_GET['id']; 

// Fetch page 
$pageStmt = $conn->query('SELECT * FROM cms_page WHERE id=:id'); 
if ($pageStmt->execute(array(':id' => $id))) { 
    if ($pageStmt->fetchColumn() != 0) { 
     $page = $pageStmt->fetch(PDO::FETCH_ASSOC); 

     // Fetch parts 
     $partsStmt = $conn->query('SELECT * FROM cms_page_parts WHERE page_id=:id'); 
     if ($partsStmt->execute(array(':id' => $id))) { 
      while ($part = $partsStmt->fetch(PDO::FETCH_ASSOC)) { 
       // ... 
      } 
      $partsStmt->closeCursor(); 
     } 
    } 
    $pageStmt->closeCursor(); 
} 
+0

Didnt похоже на работу ... я должен удалить cms_page_part. * – Andy

+0

Еще нет радости извините – Andy

+0

Можете ли вы отправить сообщение об ошибке SQL вы получаете? – William

0
$q = $conn->query("SELECT cms_page.id 
        , cms_page.title 
        , cms_page.slug 
        , cms_page_part.* 
        FROM cms_page 
        LEFT JOIN cms_page_part ON cms_page_part.page_id = cms_page.id 
        WHERE cms_page.id = '$id'"); 
+1

-1, Это ** не ** PDO. – Johan

+5

@Johan это на самом деле PDO, это просто неправильно написано. У PDO действительно есть метод, называемый запросом. http://php.net/manual/en/pdo.query.php – Shaokan