PDA

View Full Version : دستور ایمپورت SQL



Tarragon
پنج شنبه 31 فروردین 1391, 14:46 عصر
سلام به همه گی.
من یه دستور می خوام که فایل sql.sql رو در دیتابیس example ایمپورت کنه.
پیشاپیش ممنون از جواب تان با تشکر.

MMSHFE
پنج شنبه 31 فروردین 1391, 14:54 عصر
mysql_connect('locahost', 'root', '') or die('Connection error');
mysql_select_db('exmaple') or die('Database error');
mysql_query('SET NAMES \'utf8\'');
mysql_set_charset('utf8');
mysql_query(file_get_contents('sql.sql'));

Tarragon
پنج شنبه 31 فروردین 1391, 20:05 عصر
ببخشید اما این ارور رو میده.

Warning: mysql_connect() [function.mysql-connect]: php_network_getaddresses: getaddrinfo failed: No such host is known. in C:\wamp\www\boo.php on line 2

Warning: mysql_connect() [function.mysql-connect]: [2002] php_network_getaddresses: getaddrinfo failed: No such host is known. (trying to connect via tcp://locahost:3306) in C:\wamp\www\boo.php on line 2

Warning: mysql_connect() [function.mysql-connect]: php_network_getaddresses: getaddrinfo failed: No such host is known. in C:\wamp\www\boo.php on line 2
Connection error

MMSHFE
جمعه 01 اردیبهشت 1391, 08:42 صبح
دوست عزيز كدي كه گذاشتم نمونه بود. بايد اطلاعات رو برحسب نيازتون تغيير بدين. tcp://localhost:3306 ديگه چه صيغه ايه؟ حتي اگه پورت رو هم تغيير داده باشين، بايد http://localhost:3306 باشه. ضمناً localhost رو اشتباه نوشتين (l انتهاي local حذف شده).

Tarragon
جمعه 01 اردیبهشت 1391, 12:03 عصر
آقا من پورت رو عوض نکردم نمی دونم چه مشکلی داره لطفا راهنمایی کنید.

MMSHFE
جمعه 01 اردیبهشت 1391, 17:29 عصر
میشه کد کامل و فایل SQL که گذاشتین رو اینجا ضمیمه کنید؟

Tarragon
شنبه 02 اردیبهشت 1391, 06:35 صبح
با تشکر فایل ضمیمه شد.

Tarragon
شنبه 02 اردیبهشت 1391, 06:40 صبح
این هم فایل هست. هم کد ممنون می شم اگر کمکم کنید.

MMSHFE
شنبه 02 اردیبهشت 1391, 14:14 عصر
<?php
mysql_connect('localhost', 'root', '') or die('Connection error');
mysql_select_db('tra4') or die('Database error');
mysql_query('SET NAMES \'utf8\'');
mysql_set_charset('utf8');
$queries = array();
$lines = file('tra4.sql');
echo $lines[11];
$flag = false;
$current = 0;
foreach($lines as $line) {
$line = trim($line);
if(!$flag && !empty($line) && (strtoupper(substr($line, 0, 4)) == 'DROP' || in_array(strtoupper(substr($line, 0, 6)), array('CREATE', 'INSERT')))) {
$flag = true;
$queries[$current] = '';
}
if($flag) {
$queries[$current] .= $line.PHP_EOL;
if(substr($line, -1) == ';') {
$flag = false;
$current++;
}
}
}
foreach($queries as $key => $query) {
if(empty($query)) {
unset($queries[$key]);
}
}
$queries = array_values($queries);
foreach($queries as $key => $query) {
echo $key.'<pre>'.$query.'</pre>'.PHP_EOL;
mysql_query($query);
}
?>

جدا از تغییراتی که توی کد گذاشتم، اسم سرور رو اشتباه نوشته بودین.
موفق باشید.

Tarragon
شنبه 02 اردیبهشت 1391, 15:25 عصر
سلام دوباره.
ببخشید کد رو تست کردم عالی بود فقط یه مشکل SQL من حجمش 110مگ هست با این هم ارور می ده چکار کنم که درست بشه با تشکر

wallfa
شنبه 02 اردیبهشت 1391, 15:47 عصر
اگر اشتباه نکنم باید حجم اپلودت ببری بالا از طریق وب سرور ، اگر روی وب به مدیر سرور بگو !

Tarragon
شنبه 02 اردیبهشت 1391, 16:18 عصر
من از لوکال هاست استفاده می کنم.

MMSHFE
شنبه 02 اردیبهشت 1391, 22:38 عصر
سلام دوباره.
ببخشید کد رو تست کردم عالی بود فقط یه مشکل SQL من حجمش 110مگ هست با این هم ارور می ده چکار کنم که درست بشه با تشکر
براتون یک نمونه درست میکنم که با AJAX بتونید فایلهای حجیم تا 700-800 مگابایت رو هم Import کنید.
موفق باشید.

MMSHFE
یک شنبه 03 اردیبهشت 1391, 16:43 عصر
با سلام، این هم از کد AJAX Import که قولشو داده بودم. کافیه فایلهای export خودتون رو توی پوشه ajaximport بگذارین و این اسکریپت خودش اونها رو شناسایی میکنه و نشون میده. بعد، اطلاعات لازم یعنی نام فایل (اگه طولانی بود میتونید اسم فایلی که اسکریپت داده رو کپی کنید)، نام سرور، نام کاربری، رمز عبور و نام دیتابیس رو وارد کنید و روی دکمه Start Import کلیک کنید.
موفق باشید.

aliforever
یک شنبه 03 اردیبهشت 1391, 17:26 عصر
Warning: include_once(config.php) [function.include-once]: failed to open stream: No such file or directory in /home/u272439766/public_html/sql-importer/import.php on line 4

Warning: include_once() [function.include]: Failed opening 'config.php' for inclusion (include_path='.:/usr/lib/php:/usr/local/lib/php') in /home/u272439766/public_html/sql-importer/import.php on line 4

سلام . این ارور رو می ده . من چیکار کنم ؟

Tarragon
یک شنبه 03 اردیبهشت 1391, 17:51 عصر
سلام من یه فایل می خوام که خودش بطور پیشفرض فایل example.SQL رو ایمپورت کنه نه اینکه خودم انتخاب کنم

MMSHFE
یک شنبه 03 اردیبهشت 1391, 23:26 عصر
خوب عزیز همینو تغییر بدین دیگه. فایل import.php رو تغییر بدین و اسم فایل و... رو بجای اینکه از آرایه POST_$ بخونید، مستقیماً تعریف کنید.

MMSHFE
یک شنبه 03 اردیبهشت 1391, 23:27 عصر
سلام . این ارور رو می ده . من چیکار کنم ؟
باید کد کاملتون رو ببینم. احتمالاً فایلی رو include کردین که نمیتونه پیداش کنه. ببینید مسیر فایل config.php رو درست وارد کردین یا نه؟

ravand
یک شنبه 04 تیر 1391, 18:56 عصر
اونقدر توی نت گشتم تا این تاپیک رو پیدا کردم :لبخند:
گفتم بیام یه فرم آپلود فایلم بهش اضافه کنم تا کار کردن باهاش راحت تر بشه.
البته قسمت php باید روی خود هاست باشه. میشه یه جوری هم نوشت که فایل sql آپلود بشه .

<form enctype="multipart/form-data" action="test.php" method="POST">
file:<input name="fili" type="file"/><br />
<input type="submit" name="submit" VALUE="send" />
</form>
test.php

<?php
mysql_connect('localhost', 'root', '') or die('Connection error');
mysql_select_db('amar-link') or die('Database error');
mysql_query('SET NAMES \'utf8\'');
mysql_set_charset('utf8');
$queries = array();
echo $_FILES["fili"]["name"];
$fili=$_FILES["fili"]["name"];
$lines = file("$fili");
echo $lines[11];
$flag = false;
$current = 0;
foreach($lines as $line) {
$line = trim($line);
if(!$flag && !empty($line) && (strtoupper(substr($line, 0, 4)) == 'DROP' || in_array(strtoupper(substr($line, 0, 6)), array('CREATE', 'INSERT')))) {
$flag = true;
$queries[$current] = '';
}
if($flag) {
$queries[$current] .= $line.PHP_EOL;
if(substr($line, -1) == ';') {
$flag = false;
$current++;
}
}
}
foreach($queries as $key => $query) {
if(empty($query)) {
unset($queries[$key]);
}
}
$queries = array_values($queries);
foreach($queries as $key => $query) {
echo $key.'<pre>'.$query.'</pre>'.PHP_EOL;
mysql_query($query);
}
?>
کاش یک کم ساده تر بود . من همیشه به سادترین فکر میکنم. چون احساس میکنم اینطوری راحت تر و بهتر یاد میگیرم و در ذهنم میمونه. دلم نمیخواد از اسکریپت اماده استفاده کنم. اگه میشه روش کار کردنش رو برام توضیح بدید تا بفهمم و خودم یکی بنویسم.
متشکرم.

ravand
یک شنبه 04 تیر 1391, 19:41 عصر
یه پوشه ساختم به نام upload که فایل sql توی پوشه آپلود بشه و بشه ازش استفاده کرد. حالا باید امنیت پوشه رو برقرار کنیم یا اینکه بعد از وارد کردن یه دیتابیس اون رو پاک کنیم. که فکر میکنم دو تا کار رو انجام بدیم بهتره

<?php
mysql_connect('localhost', 'root', '') or die('Connection error');
mysql_select_db('amar-link') or die('Database error');
mysql_query('SET NAMES \'utf8\'');
mysql_set_charset('utf8');
$queries = array();
move_uploaded_file($_FILES["fili"]["tmp_name"],
"upload/" . $_FILES["fili"]["name"]);
$url="upload/" . $_FILES["fili"]["name"];
$lines = file("$url");
echo $lines[11];
$flag = false;
$current = 0;
foreach($lines as $line) {
$line = trim($line);
if(!$flag && !empty($line) && (strtoupper(substr($line, 0, 4)) == 'DROP' || in_array(strtoupper(substr($line, 0, 6)), array('CREATE', 'INSERT')))) {
$flag = true;
$queries[$current] = '';
}
if($flag) {
$queries[$current] .= $line.PHP_EOL;
if(substr($line, -1) == ';') {
$flag = false;
$current++;
}
}
}
foreach($queries as $key => $query) {
if(empty($query)) {
unset($queries[$key]);
}
}
$queries = array_values($queries);
foreach($queries as $key => $query) {
echo $key.'<pre>'.$query.'</pre>'.PHP_EOL;
mysql_query($query);
}
?>

MMSHFE
سه شنبه 06 تیر 1391, 11:38 صبح
کاش یک کم ساده تر بود . من همیشه به سادترین فکر میکنم. چون احساس میکنم اینطوری راحت تر و بهتر یاد میگیرم و در ذهنم میمونه. دلم نمیخواد از اسکریپت اماده استفاده کنم. اگه میشه روش کار کردنش رو برام توضیح بدید تا بفهمم و خودم یکی بنویسم.متشکرم.
کد سختی نیست. ابتدا آرایه queries$ تعریف میشه و بعد با استفاده از تابع file کل محتوای فایل sql. خونده میشه و خط به خط بصورت یک آرایه توی متغیر lines$ قرار میگیره. بعد یک flag تعریف میشه که ابتدا false هست و هرجا به یک کوئری رسیدیم، true میشه تا خطهای خونده شده به کوئری اضافه بشه. current$ هم که شماره کوئری جاری هست که ابتدا صفر هست. حالا با یک حلقه foreach تمام خطوط پردازش میشن. خطهای خالی کنار گذاشته میشن و فقط اونهایی که حالت اجرایی دارن (ابتدای خط DROP یا CREATE یا INSERT هست) شناسایی میشن. هرجا به این دستورات رسیدیم، flag$ مقدارش true میشه و یک خونه با اندیس current$ به آرایه queries$ اضافه میکنیم که ابتدا خالی هست. حالا اگه flag$ برابر با true بود، خط جاری به کوئری اضافه میشه تا وقتی که به ; انتهای کوئری برسیم و اونوقت flag$ برابر با false میشه و یک واحد به current$ اضافه میکنیم تا کوئری بعدی توی خونه بعدی آرایه queries$ قرار بگیره. بنابراین میبینید که این حلقه foreach نهایتاً تمام کوئریهای موجود در فایل sql. رو بصورت یک آرایه توی queries$ میگذاره و حلقه foreach بعدی یکی یکی اینها رو میگیره و با mysql_query اجرا میکنه. موفق باشید.