2015-05-29 118 views
2

我試圖使用PHP(與PDO)連接到MySQL數據庫,但我不熟悉PHP,所以我有點卡住了。我試圖從我的數據庫中搜索出$ userid的所有事件,然後將與它關聯的$ crn存儲在一個數組中,但我真的不知道該怎麼做。這是我到目前爲止...使用PDO從MySQL數據庫獲取信息

$sthandler = $conn->prepare('SELECT userid FROM users WHERE userid=' . $userid); 
    $sthandler->execute(array('username')); 

    if($sthandler->rowCount() > 0) 
    { 
     // User exists, get user's courses from database and returns array of CRNs 
     for(int i = 0; i < rowCount; i++) 
     { 
      $sthandler = $conn->prepare('SELECT crn FROM usercourses WHERE userid=' . $userid); 
      $sthandler->execute(array($USER => $crnArray)); 
     }    
    } 

回答

1

PDO的目的是防止連接查詢字符串,就像你當前正在做的。它應該用於準備報表。

$sthandler = $conn->prepare('SELECT userid FROM users WHERE userid= :user_id'); 
if($sthandler->execute(array(':user_id' => $user_id))) { 
    if($sthandler->rowCount() > 0) 
    { 
     // User exists, get user's courses from database and returns array of CRNs 
     for(int $i = 0; $i < rowCount; $i++) 
     { 
      $sthandler = $conn->prepare('SELECT crn FROM usercourses WHERE userid= :user_id'; 
      $sthandler->execute(array(':user_id' => $user_id)); 
     }    
    } 
} 

您試圖用數組中的隨機數據執行。

一件事,你應該換你的查詢在try/catch聲明,以處理任何潛在的錯誤:

try { 
    // run query and all 
} 
catch (PDOException $e){ 
    // echo out the error if there is one. 
    echo $e->getMessage(); 
} 

而最後一個音符,而你在它。在構建您的PDO對象時,您應該明確地打開錯誤!

$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); 
+0

'for(int i = 0; i

+0

@ Fred-ii-好地方!這裏對我來說太早了! – Darren

+1

第一件事對我來說很大聲笑lol –

2

我建議你檢查的文件上PDOPDOStatement更詳細的信息。

我想你已經通過PDO連接到你的數據庫了嗎? (別人看到PDO :: __結構())

隨着你更好的 「綁定」($ sthandler-> bindParam())的參數,而不是連接起來將一個準備好的查詢,像這樣

$sthandler = $conn->prepare('SELECT userid FROM users WHERE userid= :user_id'); 
$sthandler->bindParam(':userid', $userid, PDO::PARAM_INT); 

我不盡管如此,你還是不太瞭解你的其他代碼。也許不完整。你對應該總是唯一結果的東西做一個循環(我希望你,「userid」是一個唯一的主鍵)。

如果這個循環實際上是無用的,那麼也許你應該考慮僅1查詢在同一時間獲得用戶和課程,通過表之間的聯接:

SELECT u.userid, c.crn FROM users u INNER JOIN usercourses c ON u.userid = c.userid WHERE u.userid= :user_id 

而從這個結果,得到你想要的任何東西。是的,你的結果中會有重複的數據(不同課程的每一行上都有userid),但它仍然比做兩個單獨的查詢更好。

考慮使用$sthandler->fetch()$sthandler->fetchAll()讓每一個結果,並將它們組織成一個陣列,它適合你:

$rows = $sthandler->fetchAll(PDO::FETCH_ASSOC); // FETCH_ASSOC will return the results as array with columns' name as keys. 
// Do your loop on the array $rows to process it 

或者

while($row = $sthandler->fetch(PDO::FETCH_ASSOC)) { 
    // do whatever you like with each row 
} 

還拿達倫的意見與包裹你的PDO查詢try/catch以避免任何錯誤。

+0

你得到我的投票,這是一個很好的答案! – Darren

+0

用戶標識不是唯一的密鑰,crn(它是一個整數)是。我敢肯定,我寫這本書的方式都是錯誤的。但是我想要做的是找到每一個userid,然後將crn添加到一個數組(這是for循環的目的) – Mike

+0

@michaelavena好吧,那麼你如何識別用戶呢?然後用它來識別課程。我的加入請求將按照您想要的方式執行,但更簡單(只需一個請求,一個循環) – Strannch

相關問題