انجمن عمومی گسترش فناوری آگو
اجرای فایل sql روی سرور - نسخه‌ی قابل چاپ

+- انجمن عمومی گسترش فناوری آگو (http://forums.ago.ir)
+-- انجمن: انجمن های عمومی گسترش فناوری آگو (/forumdisplay.php?fid=1)
+--- انجمن: برنامه نویسی (/forumdisplay.php?fid=13)
+--- موضوع: اجرای فایل sql روی سرور (/showthread.php?tid=2418)



اجرای فایل sql روی سرور - agotd - 04-23-2014 03:41 PM

شاید برای شما اتفاق افتاده باشه که از دیتابیس تون یک بک آپ میگیرید و میخواید روی سرور import کنید. اما بعضی وقتا به دلیل حجم بالا ، تنظیمات PHP اجازه نمیده فایلهای بزرگ رو آپلود کنید.برای حل این مشکل میتونید فایل رو روی سرور آپلود کنید ( مثلا با FTP ) سپس با تابع زیر این فایل رو خط به خط اجرا کنید.

این رو هم اضافه کنم که هنگامی که دیتابیس رو export میکنید یک فایل با پسوند sql بهتون میده که اگر این فایل رو با نرم افزارهای ویرایش متن باز کنید میبینید که داخلش دستورات sql نوشته شده.

خب بریم سراغ تابع :
کد php:
<?php

function SplitSQL($file$delimiter ';')
{
    
$pdo =new PDO ("mysql:host=localhost;dbname=mydb",'root','');
    if (
is_file($file) === true)
    {
        
$file fopen($file'r');

        if (
is_resource($file) === true)
        {
            
$query = array();

            while (
feof($file) === false)
            {
                
$query[] = fgets($file);

                if (
preg_match('~' preg_quote($delimiter'~') . '\s*$~iS'end($query)) === 1)
                {
                    
$query trim(implode(''$query));

                    
$pdo->query($query);

                    while (
ob_get_level() > 0)
                    {
                        
ob_end_flush();
                    }
                    
flush();
                }

                if (
is_string($query) === true)
                {
                    
$query = array();
                }
            }

            return 
fclose($file);
        }
    }

    return 
false;


خب برای استفاده از این تابع باید آدرس فایل .sql رو که روی سرور آپلود کردید بهش پاس بدید. پارامتر دوم هم برای اینه که مشخص بشه دستورات sql با چه کاراکتری تموم میشن که در اینجا کاراکتر سمی کالن ( ; ) میباشد