"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > لماذا أتلقى الخطأ "محاولة الحصول على خاصية غير الكائن" عند الوصول إلى نتائج قاعدة البيانات؟

لماذا أتلقى الخطأ "محاولة الحصول على خاصية غير الكائن" عند الوصول إلى نتائج قاعدة البيانات؟

تم النشر بتاريخ 2024-11-18
تصفح:312

Why am I getting the

محاولة الوصول إلى خاصية غير كائن

أثناء محاولة استرداد البيانات من قاعدة بيانات، تواجه الخطأ "محاولة الحصول على خاصية من غير كائن." يحدث هذا الخطأ عند محاولة الوصول إلى خاصية كائن فارغ أو غير موجود.

في السيناريو الخاص بك، لديك التعليمة البرمجية التالية في صفحة التحكم الخاصة بك:

$results = mysql_query("SELECT * FROM sidemenu WHERE `menu_id`='".$menu."' ORDER BY `id` ASC LIMIT 1", $con);
$sidemenus = mysql_fetch_object($results);

وفي صفحة العرض الخاصة بك:

foreach ($sidemenus as $sidemenu): 
  echo $sidemenu->mname."<br />";
endforeach; 

ينشأ الخطأ لأن mysql_fetch_object() يُرجع كائنًا، وليس مجموعة من الكائنات. لذلك، في صفحة العرض، تحاول التكرار على كائن غير قابل للتكرار، مما يؤدي إلى حدوث الخطأ.

الحل:

لحل المشكلة، عليك يجب إما:

  • تحويل النتيجة إلى مصفوفة:
$results = mysql_query("SELECT * FROM sidemenu WHERE `menu_id`='".$menu."' ORDER BY `id` ASC LIMIT 1", $con);

$sidemenus = array();
while ($sidemenu = mysql_fetch_object($results)) {
    $sidemenus[] = $sidemenu;
}

سيؤدي هذا إلى تحويل النتائج إلى مجموعة من الكائنات، والتي يمكنك بعد ذلك تكرارها في صفحة العرض الخاصة بك.

  • استخدم PDO:

توفر شركة تنمية نفط عمان طريقة أكثر حداثة وكفاءة للتفاعل مع قواعد البيانات. تقوم PDOStatement::fetchAll(PDO::FETCH_OBJ) بإرجاع مصفوفة من الكائنات، مشابهة للوظيفة التي كنت تتوقعها من mysql_fetch_object().

$stmt = $con->prepare("SELECT * FROM sidemenu WHERE `menu_id` = :menu_id ORDER BY `id` ASC LIMIT 1");
$stmt->bindParam(':menu_id', $menu);
$stmt->execute();

$sidemenus = $stmt->fetchAll(PDO::FETCH_OBJ);

من خلال استخدام أي من هذه الحلول، يمكنك استرداد البيانات من قاعدة البيانات وتجنب الخطأ "محاولة الحصول على خاصية غير كائن. "

أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3