PDA

View Full Version : راهنمایی جهت استفاده از PDO



kab00k
پنج شنبه 17 اردیبهشت 1394, 11:43 صبح
با سلام
دوستان من در برنامم از کلاس PDO برای استفاده از دیتابیس استفاده کردم. دیتابیس هم mysql هستش

اما الان دچار مشکل شدم .

در هنگام INSERT کردن اگه تعداد رکورد یکی باشه مشکلی نیست . اما در برنامه من بعضی زمان ها لازم میشه تعداد رکورد بالایی مثلا 10000 و یا 20000 را insert کنم
که با خطا روبرو میشه .
موتور دیتابیس InooDB هستش . سرور مجازی با رم 4 هستش و فقط همین سایت روش وجود داره .

البته اول من از یک تیبل دیگه اطلاعات را میرگه و وارد لووپ میشه به این صورت


$result = $pdo->prepare($sql); $result->execute();
while ( $row = $result->fetch() ) {
$pdo->exec("INSERT INTO table2 (user,post,comment) VALUES ($row['username'],$row['post'],$row['comment']) );
}
با این کد حتی با 500 رکورد زمان INSERT خیلی طولانی میشه و خطای time out میده

از این راه حل هم استفاده کردم
http://thisinterestsme.com/pdo-prepared-multi-inserts/
خیلی کم سریعتر شد اما باز در تعداد بالا مقلا 2000 تا خطا میده .

لطفا دوستان راهنمایی کنن !
باسپاس


----------------ویرایش

دوستان تشکر خودم بعد از جستجو و البته راهنمای یکی از دوستان به نتیجه رسیدم

http://php.net/manual/en/pdo.commit.php

Unique
پنج شنبه 17 اردیبهشت 1394, 14:18 عصر
راستش اون لینکی که گذاشتین برای ۱۰۰۰۰ تا رکورد باید به خوبی کار کنه ! در این روش values ها به تعداد بالا جداد جدا داده میشه و مشکل خاصی نیست. شما دقیقا چطور ازش استفاده میکنید ؟
البته بجای param ها میتونید اطلاعات را Inline بگذارین.

من روی سررو های اختصاصی توصیه میکنم بجای pdo و کلا php بیاین از دستور خود mysql استفاده کنید. جملات insert را بریزین توی یک فایل و بعدش اینطوری :

mysql -h [Host Address] -u [User Name] --password=[Password] --default-character-set=utf8 --database=[DB Name] < file.sql

من صد ها هزار خط را در چند ثانیه براحتی میریزم اینطوری.

از LOAD DATA هم میشه استفاده کرد ولی دیگه نیاز به جملات sql نیست و باید csv خروجی بگیری و اینطوری بریزی توی Database

LOAD DATA LOCAL INFILE 'data.csv' INTO TABLE tbl_name
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\r\n'
IGNORE 1 LINES

توجه :‌ اگه عنوان ستون ها توی فایل CSV نیست خط آخر را حذف کنید.