• 0 رای - 0 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
مشکل در اجرای چند کوئری به صورت همزمان
#1
سلام،وقت بخیر

با کمک آموزش های موجود این تابع رو برای اجرای چند کوئری به صورت همزمان ایجاد کردم که به درستی کار میکنه اما یه مشکلی که داره اینکه یه warning هم ثبت میکنه،اطلاع دارم که میشه نمایش هشدارها رو خاموش کرد اما میخواستم بپرسم چطور میتونم این مورد رو حل کنم؟

متغییر $sql اینجوری پر میشه:
کد:
$sql  = "SELECT * FROM....;";
$sql .= "SELECT * FROM....;";
$sql .= "SELECT * FROM....";

تابع:
کد:
public function multi($sql){
        $Res = array();
        if (mysqli_multi_query($this->connection,$sql)){
            do{
                if ($result=mysqli_store_result($this->connection)) {
                    while($row = $result->fetch_assoc()){
                        array_push($Res, $row);
                    }
                mysqli_free_result($result);
                }
            }
        while (mysqli_next_result($this->connection));
        }
        
        return $Res;
    }

هشداری که ثبت میشه:
کد:
PHP Strict Standards:  mysqli_next_result(): There is no next result set. Please, call mysqli_more_results()/mysqli::more_results() to check whether to call this function/method in /home/

از خط زیر ایراد میگیره:
کد:
while (mysqli_next_result($this->connection));

متاسفانه با آموزش های داخل نت نتونستم مشکل رو حل کنم.خیلی قدردانی می کنم اگر کسی بتونه این مشکل رو برای من حل کنه.
  پاسخ
تشکر شده توسط :
#2
لینک: https://stackoverflow.com/questions/1471...le_rich_qa
هر چیزی که در جستن آنی آنی...
غایب
  پاسخ
تشکر شده توسط : Viva98
#3
البته تابع mysqli_multi_query برای اجرای چند کوئری "یکی بعد از دیگری" هستش، نه اجرای چند کوئری "همزمان"
اجرای همزمان مثل شروع مسابقه دو می مونه که همگی با هم در یک زمان شروع به دویدن میکنن
وبلاگ: Yousha.Blog.ir

صدام: "اگر با ارتش شاه ایران طرف بودیم، یک ماهه جنگ را می بردیم"
http://gulfnews.com/opinion/thinkers/ira...i-1.500997
  پاسخ
تشکر شده توسط : Viva98 ayoubsys
#4
(۱۳۹۷ فروردین ۲۳, ۰۹:۴۸ ق.ظ)undefined نوشته: لینک: https://stackoverflow.com/questions/1471...le_rich_qa

قبل از اینکه تاپیک بزنم خیلی جستجو کردم ولی متاسفانه نتونستم مشکل رو حل کنم،این لینک رو هم دیده بودم،در php تازه کار هستم برای همین نتونستم کدم رو به درستی تغییر بدم تا کار کنه.

(۱۳۹۷ فروردین ۲۳, ۱۱:۱۵ ق.ظ)Y.P.Y نوشته: البته تابع mysqli_multi_query برای اجرای چند کوئری "یکی بعد از دیگری" هستش، نه اجرای چند کوئری "همزمان"
اجرای همزمان مثل شروع مسابقه دو می مونه که همگی با هم در یک زمان شروع به دویدن میکنن

کاملا درسته Heart
  پاسخ
تشکر شده توسط :
#5
درود

فرض کنید 3 تیبل با نام های table_01 و table_02 و table_03 که میخوایید در یک WHILE از هر سه تیبل دیتا Select کنید

برای اینکار از کدی که توی لینک زیر نوشتم میتونید استفاده کنید

کد پی‌اچ‌پی:
<?php $CONF = array();

// Database Setting
$CONF['db_host']         = 'localhost';
$CONF['db_user']         = 'root';
$CONF['db_pass']         = 'password';
$CONF['db_name']         = 'db';

// MySQL Connection
$db = new mysqli($CONF['db_host'], $CONF['db_user'], $CONF['db_pass'], $CONF['db_name']);
if (
$db->connect_error) { die("Connection failed : " $db->connect_error); }
mysqli_set_charset($db,"utf8");

// --------------------------------------------------------------------------------------

$sql  "SELECT * FROM `table_01` ";
$sql .= "UNION ALL SELECT * FROM `table_02` ";
$sql .= "UNION ALL SELECT * FROM `table_03` ";

$db_data $db->query($sql);

while(
$data $db_data->fetch_assoc())
{
    echo 
$data['name'] ."<br />";
}
?>

دیتابیس
کد:
DROP TABLE IF EXISTS `table_01`;
CREATE TABLE `table_01` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) CHARACTER SET latin1 DEFAULT NULL,
  KEY `id` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb4;
insert  into `table_01`(`id`,`name`) values (1,'ali'),(2,'reza');

DROP TABLE IF EXISTS `table_02`;
CREATE TABLE `table_02` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) CHARACTER SET latin1 DEFAULT NULL,
  KEY `id` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb4;
insert  into `table_02`(`id`,`name`) values (1,'omid'),(2,'milad');

DROP TABLE IF EXISTS `table_03`;
CREATE TABLE `table_03` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) CHARACTER SET latin1 DEFAULT NULL,
  KEY `id` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb4;
insert  into `table_03`(`id`,`name`) values (1,'sara'),(2,'maryam');
  پاسخ
تشکر شده توسط : Viva98
#6
@MiladWorkShop
لطفا از تگ کد داخل ادیتور خودمون استفاده کنید و به جای دیگه ای لینک ندین. ممنون.
هر چیزی که در جستن آنی آنی...
غایب
  پاسخ
تشکر شده توسط : Viva98
#7
(۱۳۹۷ فروردین ۲۳, ۰۳:۴۲ ب.ظ)MiladWorkShop نوشته: درود

فرض کنید 3 تیبل با نام های table_01 و table_02 و table_03 که میخوایید در یک WHILE از هر سه تیبل دیتا Select کنید

این روش خیلی جالب نیست چون union all کوئری رو سنگین میکنه و اینکه برای استفاده از union all باید ساختار کوئری ها و تیبل ها یکی باشه که واسه من اینطور نیست و هرکدوم شرط و لیمیت و ... دارن و از چندین جدول مختلف هستن
به هر حال ممنون ...
  پاسخ
تشکر شده توسط :


پرش به انجمن:


کاربران در حال بازدید این موضوع: 1 مهمان