2012-12-26 22 views
8

Sinirlenmemeye çalışıyorum ama son zamanlarda mysql_*'un PHP'de amorti edildiğini öğrendim. PDO kullanmayı öğreneceğime karar verdim. Ben sadece bu öğleden sonra baktım ve veritabanını kullanarak onu kullanarak kolay oldu, ama sonra bir satır getirmek ve satır adları tarafından dizilenmiş bir dizi olarak satır kaydetmek istedim (işlevle aynı şekilde mysql_fetch_array did). Hayatımı kurtarmak için bunu anlayamıyorum. Açıklamak için kodumu göndereceğim ve eminim ki bu basit bir şeydir (tüm programlama hataları her zaman basittir) ama kesinlikle yanlış bir şey yapıyorum.PDO ile satır getirme

//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"]; 

Yardımlarınız için teşekkür ederiz. Bir sorgu için tüm sonuçları alan:

Alex

+6

Burada vurgulanan sözdizimini görebiliyor musunuz? Bir hata mesajı aldın mı? Değilse, error_reporting'i etkinleştirdiniz mi? – mario

+2

Hazırla() satırında bazı eksik alıntılar var, ama muhtemelen bunu biliyordunuz. –

+2

programlama size yol göstermek için hata mesajları almazsanız sinir bozucu olur. hataları göstermek için php'yi yapılandırmanız gerekir. – goat

cevap

19

fetchAll Ne diyor yok. Çok sayıda sonuç aldığından, dizine eklenmiş bir dizi alırsınız.

fetch Yalnızca bir satır istiyorsanız aradığınız şeyi yapar: sorgu için bir sonuç alır. mysql_* kodunu PDO'ya dönüştürüyorsanız, en hızlı yol bu yöntemi mysql_fetch_assoc yerine kullanmaktır.

yine fetchAll ile gidiyoruz: kodunuzu ihtimalle şu şekilde görünecektir:

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

Dediğim gibi, sadece PDO koduna eski kodu dönüştürme eğer, o daha kolay olabilir sadece hazırlanmış tablolar tüm sorguları değiştirebilir ve aşağıdaki değiştirin:

  • 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

Bu mantıklı, hızlı cevabınızı takdir ediyorum ve tavsiyenizi kullanacağım. Kodu değiştirdim ve bu bana hatayı vermemiştir. Önemli Hata: Tanımlanmamış bir yöntemle veritabanına geçin Database :: hazırla() satırında \ xxxx.php. Neden bana tanımlanmamış olduğunu söylüyor? Teşekkür ederim – Alex

+0

"Veritabanı" sınıfınızın bir PDO nesnesi olmadığını tahmin ediyorum, bu yüzden üzerine hazırlayamıyorsunuz(). –

0

Kullanım

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

İlk sorgu sonucunu alacak.

İlgili konular