رفتن به مطلب

ذخیره و اپدیت دیتابیس وردپرس با wpdb


پست های پیشنهاد شده

سلام

من کدی رو نوشتم که میاد اطلاعات رو در ارایه میریزه و بعد با متغیر $wpdb-> در دیتابیس وردپرس ذخیره می کنه.

foreach($table_rows as $tr) { // foreach row $row = $tr->childNodes; if($row->item(0)->tagName != 'tblhead') { // avoid headers $data[] = array( $trip ['Name' ]= trim($row->item(0)->nodeValue), $trip['LivePrice'] = trim($row->item(2)->nodeValue), $trip ['Changing']= trim($row->item(4)->nodeValue), $trip ['Lowest']= trim($row->item(6)->nodeValue), $trip['Topest']= trim($row->item(8)->nodeValue), $trip['Time']= trim($row->item(10)->nodeValue), ); } }

و بعد با متغیر $wpdb-> در دیتابیس وردپرس ذخیره می کنه.

foreach

($table_rows as $tr) { // foreach row $row = $tr->childNodes; if($row->item(0)->tagName != 'tblhead') { // avoid headers $wpdb->insert( $wpdb->prefix . 'fafa', array( 'title' => trim($row->item(0)->nodeValue) , 'liveprice' => trim($row->item(2)->nodeValue) , 'changing' => trim($row->item(4)->nodeValue) , 'lowest' => trim($row->item(6)->nodeValue) , 'topest' => trim($row->item(8)->nodeValue) , 'time' => trim($row->item(10)->nodeValue) ), array( '%s', '%s', '%s', '%s', '%s', '%s' ) ); $wpdb->update( $wpdb->prefix . 'fafa', array( 'title' => trim($row->item(0)->nodeValue) , 'liveprice' => trim($row->item(2)->nodeValue) , 'changing' => trim($row->item(4)->nodeValue) , 'lowest' => trim($row->item(6)->nodeValue) , 'topest' => trim($row->item(8)->nodeValue) , 'time' => trim($row->item(10)->nodeValue) ), array( '%s', '%s', '%s', '%s', '%s', '%s' ) ); } }

من می خوام ، بعد از اینکه داده ها رو ذخیره کرد، بار بعدی که ذخیره میشه مقادیر جدید جایگزین مقادیر قبلی بشه، نه اینکه دوباره مقادیر جدید بهشون اضافه بشه. یا در کل جدول موردنظر بعد insert ، آپدیت بشه.

اگه تو کد بالا نگاه کنید بعد از اینکه مقادیر insert شدن دوباره کد نوشتم که اپدیت بشن ولی این مورد اشتباهه و باید تو حلقه if قرار بگیره که مثلا اگه تو جدول داده ای نبود داده ذخیره بشه و اگه هم بود ، داده های جدید جایگزین قبلی بشن

.

لینک به ارسال

سلام

شما در آرایه و بعد در دیتابیس وارد می کنین

اگر بخواین همین رویه رو داشته باشین کل اطلاعات هر سری اپدیت میشن.

مگه اینکه بجای آرایه هر کدوم رو جدا جدا ذخیره کنین.

لینک به ارسال

کد ها رو بصورت زیر تغییر دادم

با استفاده از دستورON DUPLICATE KEY UPDATE

اما باز هم وقتی اجرا می کنم داده های جدید رو اضافه می کنه و جایگزین نمیشه. لطفا مشکل رو حل کنید خیلی نیاز دارم


$wpdb->insert( $wpdb->prefix . 'fafa',
array(
'title' => trim($row->item(0)->nodeValue) ,
'liveprice' => trim($row->item(2)->nodeValue) ,
'changing' => trim($row->item(4)->nodeValue) ,
'lowest' => trim($row->item(6)->nodeValue) ,
'topest' => trim($row->item(8)->nodeValue) ,
'time' => trim($row->item(10)->nodeValue) ),
array(
'%s',
'%s',
'%s',
'%s',
'%s',
'%s'
) )."ON DUPLICATE KEY UPDATE
title = VALUES('title' => trim($row->item(0)->nodeValue) ) ,
liveprice = VALUES('liveprice' => trim($row->item(2)->nodeValue) ) ,
changing = VALUES('changing' => trim($row->item(4)->nodeValue) ) ,
lowest = VALUES('lowest' => trim($row->item(6)->nodeValue) ) ,
topest = VALUES('topest' => trim($row->item(8)->nodeValue) ) ,
time = VALUES('time' => trim($row->item(10)->nodeValue) )";

لینک به ارسال

کد رو الان بصورت زیر تغییر دادم.

اما باز هم عمل نمی کنه.

در کد زیر ابتدا بررسی آپدیت می کنه و اگر مقداری نبود ذخیره می کنه در جدول.


$query = $wpdb->prepare (
"INSERT INTO ".$wpdb-prefix."coin_price
(id, title, liveprice, changing, lowest,topest,time)
VALUES
(%d, %s, %s, %s,%s, %s, %s)
ON DUPLICATE KEY UPDATE
title = %s,
liveprice = %s,
changing = %s ,
lowest = %s,
topest = %s,
time = %s",
1,
trim($row->item(0)->nodeValue),
trim($row->item(2)->nodeValue),
trim($row->item(4)->nodeValue),
trim($row->item(6)->nodeValue),
trim($row->item(8)->nodeValue),
trim($row->item(10)->nodeValue),

);

ویرایش شده توسط buzz
لینک به ارسال

سلام. این آخری که نوشتید خطا داره باید 13 پارامتر ارسال کنید نه 7 تا. بهتره بزارید توی ارایه و دوبار فراخوانی کنید مقادیر رو. نوع ستون id هم فکر کنم باید چک کنید که روی حالت افزایش خودکار نباشه. یا کلا یه اسم دیگه براش بزارید که قاطی نکنیم. چون ظاهرا ای دی رو خودتون تنظیم می کنید فقط.

لینک به ارسال

به نظرم این راه حلی بدی نباشه

خوب اول رکورد ها رو حذف کنید بعد دوباره رکورد جدید وارد کنید.

برای اینکار ابتدا کوئری زیر رو قبل insert قرار بدید // این کوئری تمام رکورد ها رو حذف می کنه


global $wpdb;
$delete = $wpdb->query("TRUNCATE TABLE `wp_table_name`");

بعد هم

کد خودتون


$wpdb->insert( $wpdb->prefix . 'fafa',
array(
'title' => trim($row->item(0)->nodeValue) ,
'liveprice' => trim($row->item(2)->nodeValue) ,
'changing' => trim($row->item(4)->nodeValue) ,
'lowest' => trim($row->item(6)->nodeValue) ,
'topest' => trim($row->item(8)->nodeValue) ,
'time' => trim($row->item(10)->nodeValue) ),
array(
'%s',
'%s',
'%s',
'%s',
'%s',
'%s'
)

ولی دقت کنید. ابتدا باید یک بار مقادیر وارد بشن و بعد دوباره حذف بشه. چون الان اگه کد کوئری حذف رکورد اجرا بشه ، چون رکوردی در دیتابیس ذخیره نشده ، خطا می ده .

و نکته دیگه اگه کد شما در حلقه foreach می خواید استفاده کنید باید کوئری حذف رو قبل حلقه بذارید.

لینک به ارسال

نه این کار درستی نیست که یک تیبل رو فقط برای یک ردیف اختصاص بدن. ایشون احتمالا منظورش این بوده که یک ردیف رو می خواد حذف کنه و دوباره بنویسدش. وگرنه این که کل تیبل واسه همین یک ردیف داده باشه که میشه یه چیزی مثل این شکلکه > :wacko:

لینک به ارسال

این کدی که taze نوشت کار کرد و حرف شما هم درسته.

خو اونجا که گفتید تو ارایه برزید مظورتون رو نفهمیدم کدوم رو برزیم ، لطفا کد رو بنویسید.

لینک به ارسال

کد رو که وقتشو ندارم حقیقت بنویسم اما منظورم همون 6 ، 7 تا پارامتری بود که به تابع prepare فرستادید. اونا رو باید دوبار بفرستید دیگه یکی برای حالت اول دستور اس کیو التون و یکی هم برای حالت دومش برای هر %s که مینویسید باید یه پارامتر بفرستید دیگه.

کدی که tazeh نوشت براتون میاد تیبل رو به کلی ریست میکنه و مسلما کار میده ! اما شما نباید یک تیبل رو به کلی برای همین یک ردیف داده اختصاص بدید ( مطمئن نیستم ولی فکر میکنم کار درستش اینه که اگر همین یک ردیف داده هست توی تیبل دیگه ای اگه دارید یه چیزی مثل wp-option یک فیلد اضافه بکنید و همه ی مقادیرتون رو توی اون سریالیز کنید و ذخیره کنید )

موفق باشید.

لینک به ارسال

به گفتگو بپیوندید

هم اکنون می توانید مطلب خود را ارسال نمایید و بعداً ثبت نام کنید. اگر حساب کاربری دارید، برای ارسال با حساب کاربری خود اکنون وارد شوید .

مهمان
ارسال پاسخ به این موضوع ...

×   شما در حال چسباندن محتوایی با قالب بندی هستید.   حذف قالب بندی

  تنها استفاده از 75 اموجی مجاز می باشد.

×   لینک شما به صورت اتوماتیک جای گذاری شد.   نمایش به صورت لینک

×   محتوای قبلی شما بازگردانی شد.   پاک کردن محتوای ویرایشگر

×   شما مستقیما نمی توانید تصویر خود را قرار دهید. یا آن را اینجا بارگذاری کنید یا از یک URL قرار دهید.

×
×
  • اضافه کردن...