PDO sorgu sorunu

2 Cevap php

Ben PDO eski mysql_ * işlevleri bazı kod güncelleme duyuyorum. Bu, bir sorun olmadan bağlayan bir sorun olmadan sorgu çalışır, ancak resultset boştur. PDO :: query () bir PDOStatement nesnesi dönmek gerekiyordu, ama ben karşılığında gerçek alıyorum. Bildirilen hata yok.

İşte benim kod:


try
{
    $DB = new PDO("mysql:host=localhost;dbname=dbname", "user", "pass");
    $stmt = $DB->prepare("SELECT * FROM report_clientinfo");
    $stmt->execute();
}catch(PDOException $e)
{
    echo $e->getMessage() . "\n";
}


echo gettype($stmt) . "\n";
if ($stmt) echo "true\n";
else echo "false\n";

$resultset = $stmt->fetchAll();

if(empty($resultset))
{
    exit("ERROR: getClientInfo query failed.");
}

$DB = null;

print_r($resultset);

Ben görüyorum çıktı:

object true ERROR: getClientInfo query failed.

Hiçbir sonuç döndürüyor değil neden Herhangi bir fikir?

2 Cevap

object  
true  
ERROR: getClientInfo query failed.

Lütfen PDOStatement $stmt değişken bir nesne değil, "true" olduğu bildirildi aslında gibi görünüyor bana. Daha sonra kod yazdırır "true" o bir nesne çünkü $stmt, öyle ki, boş olmayan olduğunu gördüğünde.

Sana $stmt->execute() den dönüş değerini kontrol etmenizi öneririz. Bir SQL hatası olabilir. Eğer tablo adı veya tabloyu yanlış Örneğin, "dbname" veritabanında yok ki size bağlı, ya siz yapın kullanıcı bu tabloyu sorgulamak için ayrıcalığa sahip değildir.

Ayrıca $stmt->errorInfo() oluştu herhangi bir hata hakkında daha fazla bilgi almak için kontrol edin.

Ben yanlış DSN işaret olduğunu rapor için biraz utandım. Bunu ben Yılbaşı gecesi için dışarı gittikten sonra uyku sadece bir kaç saat yeni bir şey öğrenmeye çalışıyorum için ne olsun sanırım. PDOStatement :: errorInfo () yöntemi hakkında ipucu için teşekkürler, ben daha önce bunu fark etmemişti.