حل مشكلة Warning: mysqli_num_rows() في PHP عند استرجاع النتائج من قاعدة البيانات
عند النظر إلى الشيفرة التي قدمتها، يظهر أن هناك خطأ في الاستخدام الصحيح للدالة mysqli_num_rows()
وهو ما يؤدي إلى الإنذار الذي تظهره. دعونا نقوم بفحص الشيفرة لنجد الخطأ ونقوم بتصحيحه.
في البداية، يجب أن تستخدم mysqli_num_rows()
على النتيجة ($result
)، ليس على الاستعلام ($query
). يمكنك تغيير الكود ليكون كالتالي:
-
أهمية تهيئة القوائم في جافا19/02/2024
-
فهم أساسيات البرمجة بالكائنات في جافا23/01/2024
-
تحويل الأنواع إلى سلاسل نصية في C++28/03/2024
php if(mysqli_num_rows($result) > 0): ?>
while($row = mysqli_fetch_assoc($result)): ?>
endwhile; ?>
else: ?>
endif; ?>
الآن، يجب أن تظهر الرسالة بدون أي أخطاء. ولكن يجب عليك التحقق من أن الاستعلام يتم تكوينه بشكل صحيح ويعيد نتائج. يمكنك ذلك عن طريق إضافة var_dump($query)
لطباعة الاستعلام للتحقق من صحته.
php
var_dump($query); // يطبع الاستعلام للتحقق من صحته
$result = mysqli_query($connect, $query);
if ($result === false) {
echo mysqli_error($connect);
die;
}
?>
قد يكون الخطأ الآخر المحتمل في الاستعلام نفسه. تأكد من أن جميع الحقول والجداول المستخدمة في الاستعلام تم تحديدها بشكل صحيح وأنها موجودة في قاعدة البيانات الخاصة بك.
إذا استمرت المشكلة، يفضل استخدام prepared statements
لتجنب مشاكل الأمان مثل SQL injection
.
المزيد من المعلومات
بالطبع، دعونا نوسع قليلاً على المعلومات ونقدم بعض التوجيهات الإضافية لتحسين أداء الشيفرة الخاصة بك وضمان السلامة والفعالية.
-
استخدام Prepared Statements:
لضمان سلامة استعلامات قاعدة البيانات وتجنب هجمات SQL injection، يفضل استخدام prepared statements. يمكنك تعديل الاستعلام بشكل التالي:php$query = "SELECT * FROM residential WHERE 1=1"; if ($type != "") { $query .= " AND type=?"; } // ... (تكرار العمليات السابقة للشروط الأخرى) $stmt = mysqli_prepare($connect, $query); if ($stmt === false) { echo mysqli_error($connect); die; } // ربط القيم مع المتغيرات في الاستعلام if ($type != "") { mysqli_stmt_bind_param($stmt, "s", $type); } // ... (تكرار العمليات السابقة لربط القيم مع المتغيرات في الاستعلام) mysqli_stmt_execute($stmt); $result = mysqli_stmt_get_result($stmt);
هذا النهج يقوم بإنشاء استعلام معقول وآمن دون الحاجة إلى إجراء عمليات تماثل يدوية.
-
فحص الاتصال بقاعدة البيانات:
تأكد من أن اتصالك بقاعدة البيانات يتم بشكل صحيح. تأكد من أن المتغير$connect
يحتوي على اتصال صحيح. -
التحقق من وجود الجدول والحقول:
تأكد من أن الجدولresidential
والحقول المستخدمة في الاستعلام موجودة في قاعدة البيانات الخاصة بك. -
التحقق من القيم المرسلة:
تحقق من أن القيم التي تتم إرسالها للشيفرة تكون صحيحة وتتوافق مع نوع البيانات المتوقع. -
تحسين أداء الكود:
قم بتحسين أداء الكود بتجنب استخدام الدوال المهمة مثلmysqli_fetch_assoc()
داخل حلقة الكود. يمكنك استخدامfetch_all()
لاستخراج جميع النتائج دفعة واحدة. -
تحسين تنسيق الشيفرة:
قم بتنظيم الشيفرة بشكل جيد لتحسين قراءتها وصيانتها على المدى الطويل.
باتباع هذه النصائح، يمكنك تحسين كفاءة الشيفرة الخاصة بك وتجنب مشكلات الأمان المحتملة.