2012-12-26 74 views
8

我試圖不讓人感到沮喪,但最近我已經瞭解到mysql_*在PHP中已經摺舊。我決定我會學習如何使用PDO。我剛剛在今天下午看到它,並且使用它很容易連接到數據庫,但是我想用它取一行並將行保存爲列名索引的數組(與函數相同mysql_fetch_array)。我無法想出拯救我的生活。我會發布我的代碼來澄清,並且我確定它很簡單(所有的編程錯誤總是很簡單),但我確實做錯了什麼。如何使用PDO獲取行

//CONNECT TO DATABASE 
$host = $_PARAM["DatabaseServer"]; 
$db  = $_PARAM["MainDatabase"]; 
$dbuser = $_PARAM["DatabaseUser"]; 
$dbpass = $_PARAM["DatabasePass"]; 
try 
{ 
    $Database = new PDO("mysql:host=$host;dbname=$db", $dbuser, $dbpass); 
} 
catch (PDOException $e) 
{ 
    echo "There was an unexpected error. Please try again, or contact us with concerns"; 
} 

$stmt = $Database->prepare("SELECT * FROM users WHERE username=?"); 
$stmt->execute(array($sUserCook)); 
$row = $stmt->fetchAll(PDO::FETCH_ASSOC); 

echo $row["username"]; 

謝謝你的幫助。

亞歷

+6

你能在這裏看到語法突出顯示嗎?你收到錯誤信息了嗎?如果沒有,您是否啓用了error_reporting? – mario

+2

這裏的'prepare()'行有一些缺失的引號,但你可能知道這一點。 –

+2

編程令人沮喪,當你沒有得到錯誤信息來幫助指導你。你需要配置php來顯示你的錯誤。 – goat

回答

19

fetchAll做什麼它說:它取了一個查詢所有結果。由於它提取了很多結果,你會得到一個索引數組。

fetch如果您只需要一行,您可能會尋找什麼:它爲查詢提取一個結果。如果您將mysql_*代碼轉換爲PDO,最快的方法是使用此方法代替mysql_fetch_assoc

如果你還在用fetchAll去:你的代碼很可能只是看起來像這樣:

$rows = $stmt->fetchAll(PDO::FETCH_ASSOC); 
foreach ($rows as $row) { 
    echo $row['username']; 
} 

就像我說的,如果你的遺留代碼只是轉換爲PDO的代碼,它可能更容易只是改變所有查詢預處理語句並替換以下內容:

  • mysql_fetch_assoc($result)
    - >$stmt->fetch(PDO::FETCH_ASSOC)
  • mysql_num_rows($result)
    - >$stmt->rowCount()
  • while ($row = mysql_fetch_assoc($result)) {}
    - >foreach ($stmt->fetchAll(PDO::FETCH_ASSOC) as $row) {}
+0

這很有道理,我很欣賞你的快速反應,我會用你的建議。我改變了代碼,它沒有給我錯誤致命錯誤:在\ xxxx.php中調用未定義的方法Database :: prepare()。爲什麼它告訴我它是未定義的?謝謝 – Alex

+0

我猜你的「數據庫」類不是一個PDO對象,這就是爲什麼你無法準備()它。 –

0

使用

$row = $stmt->fetch(PDO::FETCH_ASSOC); 

你會得到第一個查詢結果。