اذهب إلى المحتوى
  • 0

[php] خطأ في عمل function لجلب داتا من قاعدة البيانات في mysqli_connect و mysqli_query

محمد الاهلي

السؤال

سلام عليكم 

ادرس الآن ال functions و حاولت اطبق بعمل function احددلها ببساطة شديدة اسم الجدول و الحقل المطلوب و هي تجيبلي الداتا اللي جواه

الكود كالتالي

function getData($table,$data){

$q = "select * from $table";

$connect = mysqli_connect('localhost','root','','moh');

$result = $connect->query($q);

while ($row = mysqli_fetch_assoc($result)){
    return $row[$data];
}

}

سؤال رقم 1

لما جيت استدعي ال function بالطريقة دي

getData('user','id'); // Get Data From id field in table (user ) 

جاتلي رسالة خطأ 

Warning: mysqli_fetch_assoc() expects parameter 1 to be mysqli_result, bool given in 

الخطأ يشير الى السطر الخاص بحلقة while 

فلم يحدث معي هذا الخطأ

السؤال الثاني

انا اصلا معرف متغير connect و الخاص بالاتصال بقاعدة البيانات قبل كده بس من جوا الفانكشن مش راضي ياخده غير لما اعرفهوله من جديد فايه الحل ؟

 

شكرا لكم

رابط هذا التعليق
شارك على الشبكات الإجتماعية

Recommended Posts

  • 1
بتاريخ 5 دقائق مضت قال محمد الاهلي:

الكود كامل اهو اخي

المتغيرات التي يتم تعريفها داخل دالة غير مرئية خارجها، ما أقصده كالتالي:

<?php
function getData($table,$data){

  $connect = mysqli_connect('localhost','root','','moh');
  
  $q = "select * from $table";
  echo $q;
  
  $result= mysqli_query($connect, $q);
  echo $result;

  while ($rows = mysqli_fetch_assoc($result)){
    return $rows[$data];
  }

}

echo 'result: ' . getData('user','id');


 

 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0

انتبه لما يلي:

يوجد نوعين من طرق التعامل مع إجرائيات mysqli بناء الاتصال واستخدامه حاول البحث عن 

  • PHP mysqli query() Function

في عملية الاتصال تقوم باستخدام Procedural style:

mysqli_connect

$con = mysqli_connect("localhost","my_user","my_password","my_db");

فعليه نتابع استخدام الإجرائيات بالشكل mysqli_query:

$result = mysqli_query($con, $q)

أي تمرير الاتصال مع كل دالة تستخدمه.

مشكلتك:

إن ما تحاول القيام به:

$connect->query($q);

هو من النوع Object oriented style:

$mysqli = new mysqli("localhost","my_user","my_password","my_db");
ثم يمكن العمل ك
$mysqli -> query(query, resultmode)

الذي يستخدم الاتصال ك كائن برمجي نطبق من خلاله الدوال.

عليك استخدام أحد الطريقتين

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0

شكرا لحضرتك

الكود بقا كده بس لسه الخطأ ظاهر

function getData($table,$data){

$q = "select * from $table";

$connect = mysqli_connect('localhost','root','','moh');
$result= mysqli_query($connect, $q);


while ($row = mysqli_fetch_assoc($result)){
    return $row[$data];
}

}

 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0
بتاريخ منذ ساعة مضت قال محمد الاهلي:

شكرا لحضرتك

الكود بقا كده بس لسه الخطأ ظاهر

 

هل اختلفت رسالة الخطا؟

أرجو عمل echo q و echo result لنعرف ما يحصل.

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0
بتاريخ 33 دقائق مضت قال محمد الاهلي:

لم تختلف اخي


Notice: Undefined variable: 

سواء لل q او لل result

أرجو إرفاق ما يتم طباعته ضمن تنفيذ الدالة لأتمكن من تحديد المشكلة

اطبع المتغيرات بعد تعريفهم وليس قبل.

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0

الكود كامل اهو اخي

<?php
function getData($table,$data){

    $q = "select * from $table";

    $connect = mysqli_connect('localhost','root','','moh');
    $result= mysqli_query($connect, $q);
//$result = $connect->query($q);

    while ($rows = mysqli_fetch_assoc($result)){
        return $rows[$data];
    }

}

getData('user','id');

echo $q;

echo $result;

 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0
بتاريخ 1 دقيقة مضت قال محمد الاهلي:

هذه هي النتيجة

على الأغلب لايوجد بيانات في الجدول user تأكد من اسمه، فيعيد الاستعلام result = false

$result= mysqli_query($connect, $q);
echo $result;

// أضف هذا السطر
if (!$result) {
  printf("Error: %s\n", mysqli_error($con));
  exit();
}

while ($rows = mysqli_fetch_assoc($result)){
	return $rows[$data];
}

 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0

بعتذر جدا

هو اسمه users و ليس user حقك عليا

الآن عدلت لكن جالي خطأ جديد

select * from users
Fatal error: Uncaught Error: Object of class mysqli_result could not be converted to string in C:\xampp\htdocs\moh\test.php:10 Stack trace: #0 C:\xampp\htdocs\moh\test.php(23): getData('users', 'id') #1 {main} thrown in C:\xampp\htdocs\moh\test.php on line 10

 

 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0
 echo $result;

لما حطيته ككومنت اشتغلت الفنكشن

شكرا شكرا شكرا لوقتك اخي الفاضل 

و سامحني على التعب

كده ال فنكشن جابت اول نتيجة في الجدول بس

لو عاوزها اخليها تجيب كل اللي فيه الجدول بناء على الاستعلام اعمل ايه ؟

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0

نعم حذفتها 

كده ال فنكشن جابت اول نتيجة في الجدول بس

لو عاوزها اخليها تجيب كل اللي فيه الجدول بناء على الاستعلام اعمل ايه ؟

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0
بتاريخ 5 دقائق مضت قال محمد الاهلي:

كده ال فنكشن جابت اول نتيجة في الجدول بس

 

السبب أنها تعمل return ضمن الحلقة وبذلك يتوقف تنفيذها، يمكنك عمل تجميع للنتائج 

$final_result = "";

while ($rows = mysqli_fetch_assoc($result)){
	$final_result .= $rows[$data] . '<br>';
}

return $final_result;

 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...