يقوم mysqli_statement::num_rows() بإرجاع القيمة الخاطئة

StackOverflow https://stackoverflow.com/questions/80292

  •  09-06-2019
  •  | 
  •  

سؤال

كنت أكتب فئة معالج قاعدة البيانات في 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);
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top