سؤال
وأنا تحديث بعض رمز من 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 ()، لم أكن قد لاحظت ذلك من قبل.