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

السؤال

نشر

تحيه طيبه للجميع 

قمت باستعمال LEFT JOIN عدد كبير من المرات في ملف واحد والان يظهر لدي المسج التالي:

Fatal error: Uncaught Error: Call to a member function bind_param() on bool in /home/**********/getli.php:76 Stack trace: #0 {main} thrown in /home/getli.php on line 76

انا متأكد من السطر انه قد كتب بشكل صحيح ولكن هل يوجد حد معين لعدد الاسطر التي ممكن اكتبها في الملف الواحد او الاستعلام الواحد؟ من LEFT JOIN؟

اذا كان نعم ما هو الحل اذن؟

Recommended Posts

  • 0
نشر (معدل)
بتاريخ 13 دقائق مضت قال Hassan Hedr:

هناك مشكلة في نص الاستعلام المستخدم، يرجى إرفاق شيفرة PHP التي ينتج عنها هذا الخطأ حتى تتوضح المشكلة

مرحبا اخي الكريم 

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

حقيقه اول مره تمر على هذا المشكلة انا بنفسي لم يسبق ان كتبت سطر استلام كبير الى هذا الحد تقريبا 60 سطر من عمليات LEFT JOIN

هل توجد طريقته لتقسيم الاستعلام لحل هذا المشكلة ؟

 

عند انقاص سطر واحد من الاستعلام يعود للعمل بشكل طبيعي لا يهم وموقع السطر 

 

 

الكود بشكل التالي اخي الكريم مع العلم انني فقط حذفت اسطر الاستعلام 

<?php
require_once 'connt.php';

$id=$_GET['id'];


$sql="SELECT  * FROM topics
LEFT JOIN #########
LEFT JOIN #########
LEFT JOIN #########
LEFT JOIN #########
LEFT JOIN #########



where topics.id = ? " ;

$stmt = $con->prepare($sql); 

$stmt->bind_param("s",$id);

$stmt->execute();

$result = $stmt->get_result();


$array = array();

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


echo ($result) ?
json_encode(array("code" => 1, "result"=>$array)) :
json_encode(array("code" => 0, "message"=>"Data not found !"));


?>

@Hassan Hedr

تم التعديل في بواسطة مروان مروان3
  • 1
نشر
بتاريخ الآن قال مروان مروان3:

مرحبا اخي الكريم 

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

حقيقه اول مره تمر على هذا المشكلة انا بنفسي لم يسبق ان كتبت سطر استلام كبير الى هذا الحد تقريبا 60 سطر من عمليات LEFT JOIN

هل توجد طريقته لتقسيم الاستعلام لحل هذا المشكلة ؟

حاول تمرير مصفوفة الخيارات التالية للكائن PDO المستخدم للاتصال مع قاعدة البيانات، مما سيؤدي لرمي خطأ من نوع PDOException عند حدوث مشاكل في تنفيذك للاستعلامات، وسيحوي رسالة توضح لك الخطأ الذي يتم:

$db = new PDO($dsn, $user, $password, [PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION]);
                                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

بما أن الاستعلام كبير فهناك احتمال كبير لوجود خطأ إملائي في نص الاستعلام، رسالة الخطأ ستساعدك في تحديد مكان وجود الخطأ في الاستعلام

  • 0
نشر (معدل)
بتاريخ 5 دقائق مضت قال Hassan Hedr:

حاول تمرير مصفوفة الخيارات التالية للكائن PDO المستخدم للاتصال مع قاعدة البيانات، مما سيؤدي لرمي خطأ من نوع PDOException عند حدوث مشاكل في تنفيذك للاستعلامات، وسيحوي رسالة توضح لك الخطأ الذي يتم:


$db = new PDO($dsn, $user, $password, [PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION]);
                                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

بما أن الاستعلام كبير فهناك احتمال كبير لوجود خطأ إملائي في نص الاستعلام، رسالة الخطأ ستساعدك في تحديد مكان وجود الخطأ في الاستعلام

مرحبا اخي الكريم

قصدك في الملف التالي بهذا الشكل؟

<?php


$host='localhost';

$username='';

$pwd='';

$db="";



$con=mysqli_connect($host,$username,$pwd,$db) or die('Unable to connect');

$db = new PDO($host, $username, $pwd, [PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION]);

if(mysqli_connect_error($con))

{

    echo "Failed to Connect to Database ".mysqli_connect_error();

}

	 

  

?>

 

قمت بتعديل على صفحة الاتصال قليلا وحصلت على النتيجة التأليه اضافيه عن السابق

Warning: mysqli::prepare(): Couldn't fetch mysqli in /home/*****/getlist.php on line 76

@Hassan Hedr

تم التعديل في بواسطة مروان مروان3
  • 1
نشر
بتاريخ 23 دقائق مضت قال مروان مروان3:

مرحبا اخي الكريم

قصدك في الملف التالي بهذا الشكل؟


<?php


$host='localhost';

$username='';

$pwd='';

$db="";



$con=mysqli_connect($host,$username,$pwd,$db) or die('Unable to connect');

$db = new PDO($host, $username, $pwd, [PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION]);

if(mysqli_connect_error($con))

{

    echo "Failed to Connect to Database ".mysqli_connect_error();

}

	 

  

?>

 

قمت بتعديل على صفحة الاتصال قليلا وحصلت على النتيجة التأليه اضافيه عن السابق


Warning: mysqli::prepare(): Couldn't fetch mysqli in /home/*****/getlist.php on line 76

@Hassan Hedr

هل قيم user و db فارغة في الشيفرة الأصلية، إذا كانت كذلك قد تكون سبب المشكلة، وللأسف لا يمكن توضيح المشكلة بدون عرض الاستعلام الحقيقي المنفذ

  • 0
نشر (معدل)
بتاريخ 18 دقائق مضت قال Hassan Hedr:

هل قيم user و db فارغة في الشيفرة الأصلية، إذا كانت كذلك قد تكون سبب المشكلة، وللأسف لا يمكن توضيح المشكلة بدون عرض الاستعلام الحقيقي المنفذ

مرحبا اخي الكريم هيا ليست فارغه لدي

لا توجد مشكله اخوي انا فقط ارغب بمعرفة اذا كان توجد طريقة لتقسيم الاستعلام وجعله يعمل بشكل متسلسل ؟ اذا كان لديك طريقه لفعل ذلك

شاهد اخي لقد وجدت المشكلة ولكن مع الأسف لا يوجد حل لها في هذا الموضوع 

https://stackoverflow.com/questions/32058844/maximum-no-of-table-we-can-left-join-in-one-mysql-query#:~:text=The%20maximum%20number%20of%20tables,a%20single%20join%20is%2061.

 

سوف تفهم مشكلتي اكثر من خلال هذا المشاركة

 

@Hassan Hedr

تم التعديل في بواسطة مروان مروان3
  • 1
نشر
بتاريخ 22 دقائق مضت قال مروان مروان3:

مرحبا اخي الكريم هيا ليست فارغه لدي

لا توجد مشكله اخوي انا فقط ارغب بمعرفة اذا كان توجد طريقة لتقسيم الاستعلام وجعله يعمل بشكل متسلسل ؟ اذا كان لديك طريقه لفعل ذلك

شاهد اخي لقد وجدت المشكلة ولكن مع الأسف لا يوجد حل لها في هذا الموضوع 

https://stackoverflow.com/questions/32058844/maximum-no-of-table-we-can-left-join-in-one-mysql-query#:~:text=The%20maximum%20number%20of%20tables,a%20single%20join%20is%2061.

 

سوف تفهم مشكلتي اكثر من خلال هذا المشاركة

 

@Hassan Hedr

من الواضح إذًا أن المشكلة في عدد استعلامات JOIN المسموحة في MYSQL تصل إلى 61 جدول فقط، الحل يكون إما بإعادة التفكير في بنية الاستعلام وهل يمكن تجزئته إلى استعلامين منفصلين بحسب ما هو المطلوب منه، أو أصبح هناك حاجة لتوسيع قاعدة البيانات وتطويرها إلى برنامج إدارة أقوى مثل SQL Server الذي يسمح بعدد 256 عملية JOIN في الاستعلام الواحد،

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

  • 0
نشر
بتاريخ 15 دقائق مضت قال Hassan Hedr:

من الواضح إذًا أن المشكلة في عدد استعلامات JOIN المسموحة في MYSQL تصل إلى 61 جدول فقط، الحل يكون إما بإعادة التفكير في بنية الاستعلام وهل يمكن تجزئته إلى استعلامين منفصلين بحسب ما هو المطلوب منه، أو أصبح هناك حاجة لتوسيع قاعدة البيانات وتطويرها إلى برنامج إدارة أقوى مثل SQL Server الذي يسمح بعدد 256 عملية JOIN في الاستعلام الواحد،

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

هل يمكن تجزئته إلى استعلامين منفصلين

اخي بخصوص هذا الامر كيف يمكن فعل ذلك بحيث ان الاتصالان يكونوا متصلين ببعض او مرتبطات ببعض؟

  • 1
نشر
بتاريخ الآن قال مروان مروان3:

هل يمكن تجزئته إلى استعلامين منفصلين

اخي بخصوص هذا الامر كيف يمكن فعل ذلك بحيث ان الاتصالان يكونوا متصلين ببعض او مرتبطات ببعض؟

إذا كانت كل تعليمات JOIN متعلقة ببعضها إذًا الاستعلام منطقيًا كتلة واحدة ولا يمكن فصله، في حال كانت بعض تلك التعليمات يمكن إزلتها وتحصل على بيانات أقل لكنها كافية نسبيًا وتنفيذ استعلام آخر يحوي البيانات الباقية وتعليمات JOIN المُزالة من الأولى يكون حل لتلك المشكلة، مثال للتوضيح:

SELECT * FROM table
LEFT JOIN A ...
LEFT JOIN B ...
LEFT JOIN C ...

# استعلام أول 
SELECT * FROM table
LEFT JOIN A ...
LEFT JOIN B ...

# استعلام ثانِِ 
SELECT * FROM table
LEFT JOIN C ...

الأمر يعتمد على طبيعة هذه البيانات والمطلوب من الاستعلام، يجب تحليل ودراسة الاستعلام جيدًا لمعرفة امكانية تقسيمه إلى استعلامين أم لا 

  • 0
نشر
بتاريخ 2 دقائق مضت قال Hassan Hedr:

إذا كانت كل تعليمات JOIN متعلقة ببعضها إذًا الاستعلام منطقيًا كتلة واحدة ولا يمكن فصله، في حال كانت بعض تلك التعليمات يمكن إزلتها وتحصل على بيانات أقل لكنها كافية نسبيًا وتنفيذ استعلام آخر يحوي البيانات الباقية وتعليمات JOIN المُزالة من الأولى يكون حل لتلك المشكلة، مثال للتوضيح:


SELECT * FROM table
LEFT JOIN A ...
LEFT JOIN B ...
LEFT JOIN C ...

# استعلام أول 
SELECT * FROM table
LEFT JOIN A ...
LEFT JOIN B ...

# استعلام ثانِِ 
SELECT * FROM table
LEFT JOIN C ...

الأمر يعتمد على طبيعة هذه البيانات والمطلوب من الاستعلام، يجب تحليل ودراسة الاستعلام جيدًا لمعرفة امكانية تقسيمه إلى استعلامين أم لا 

لا اعتقد هذا الامر سوف ينجح لدي اخي الكريم

ولكن لدي حل مختلف وهيا دمج الجداول وتفريق البيانات من خلال عمود معرف منفرد بمعنى Sub ID  

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

 

كنت فاصل الجداول لهذا السبب الجداول المنفصلة يسهل إدارتها حذف واضافته وما شابه

  • 1
نشر
بتاريخ 6 دقائق مضت قال مروان مروان3:

لا اعتقد هذا الامر سوف ينجح لدي اخي الكريم

ولكن لدي حل مختلف وهيا دمج الجداول وتفريق البيانات من خلال عمود معرف منفرد بمعنى Sub ID  

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

كنت فاصل الجداول لهذا السبب الجداول المنفصلة يسهل إدارتها حذف واضافته وما شابه

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

أنصحك بقراءة كتاب تصميم قواعد البيانات، فهو يشرح التفاصيل المتعلقة بطريقة التصميم الأمثل لقواعد البيانات: 

 

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

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

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

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   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.

  • إعلانات

  • تابعنا على



×
×
  • أضف...