يقوم mysqli_statement::num_rows() بإرجاع القيمة الخاطئة
سؤال
كنت أكتب فئة معالج قاعدة البيانات في PHP باستخدام فئة mysqli والبيانات المعدة.كنت أحاول طباعة النتيجة.لم ينجح الأمر على الفور لذا قررت إجراء بعض التصحيح.حاولت استخدام num_rows()
الطريقة من mysqli_statement
الطبقة، لكنها استمرت في العودة 0.قررت أن أكتب جزءًا صغيرًا من كود الاختبار لإبقائه أكثر بساطة حتى أتمكن من رؤية الخطأ الذي يحدث.تمكنت بعد ذلك من إرجاع البيانات التي أردتها، ولكن num_rows()
لا تزال الطريقة تُرجع 0 حتى عندما تقوم بالفعل بتحديد واسترداد بعض البيانات.هنا هو الرمز:
$mysqli = new mysqli('localhost', 'username', 'password', 'database');
if(mysqli_connect_errno())
{
die('connection failed');
}
$statement = $mysqli->stmt_init();
$query = "SELECT name FROM table WHERE id = '2000'";
if($statement->prepare($query))
{
$statement->execute();
$statement->bind_result($name);
$statement->fetch();
$statement->store_result();
echo $statement->num_rows();
echo $name;
}
else
{
echo 'prepare statement failed';
exit();
}
إذن نعم النتيجة المتوقعة هي:
1name
والنتيجة الفعلية هي:
0name
يمكن لأحد أن يقول لي لماذا هذا؟
المحلول
أتساءل عما إذا كان num_rows() يقوم بالإبلاغ بالنسبة لمجموعة النتائج الحالية.حاول التقاط num_rows() قبل جلب البيانات.على سبيل المثال
if($statement->prepare($query))
{
$statement->execute();
$statement->store_result();
echo $statement->num_rows();
$statement->bind_result($name);
$statement->fetch();
echo $name;
}
هل لذلك أي تأثير؟
نصائح أخرى
num_rows ليست طريقة، إنها خاصية.
لا يبدو أنك قد أعلنت $name.
حاول أيضًا إزالة bind_result() وfetch() بحيث يقرأ شيئًا مثل هذا:
$statement->execute();
$statement->store_result();
printf("Number of rows: %d.\n", $statement->num_rows);