سؤال

وأنا تحديث بعض رمز من mysql_ القديم * وظائف لشركة تنمية نفط عمان. لأنه يربط دون مشكلة، ويدير الاستعلام دون مشكلة، ولكن resultset وفارغ. ومن المفترض شركة تنمية نفط عمان :: الاستعلام () لإرجاع كائن PDOStatement، ولكن أنا على الحصول على صحيح في المقابل. يتم الإبلاغ عن أية أخطاء.

وهنا هو رمز بلادي:


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);

وإخراج أرى هو:

وجوه صحيح خطأ: فشل الاستعلام getClientInfo

وأي أفكار لماذا لا يعود أي من النتائج؟

هل كانت مفيدة؟

المحلول

object  
true  
ERROR: getClientInfo query failed.

ويبدو لي مثل متغير PDOStatement $stmt الخاص بك هو في الواقع تشير التقارير إلى أن كائن، وليس "true". رمز ثم يطبع "true" عندما يرى أن $stmt غير قابلة للباطل، والذي هو عليه، لأنه كائن.

وننصحك بأن تحقق قيمة الإرجاع من $stmt->execute(). قد يكون لديك خطأ SQL. على سبيل المثال، إذا كنت أخطأت في كتابة اسم الجدول، أو عدم وجود جدول في قاعدة البيانات "dbname" أن اتصالك، أو المستخدم الذي سجل دخول ليس لديها امتياز للاستعلام هذا الجدول.

$stmt->errorInfo() للحصول على مزيد من التفاصيل حول أي الخطأ الذي حدث.

نصائح أخرى

وأنا أشعر بالحرج قليلا تقديم تقرير أنني مشيرا إلى DSN الخطأ. انا اعتقد ان هذا ما يحصل لمحاولة تعلم شيء جديد في غضون بضع ساعات من النوم بعد الخروج ليلة رأس السنة الميلادية الجديدة. شكرا لطرف على طريقة PDOStatement :: errorInfo ()، لم أكن قد لاحظت ذلك من قبل.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top