کلاسی به اسم wpdb وجود دارد که باعث میشه بدون درگیر شدن در مرحله اتصال به دیتابیس انواع کوئری crud به معنی (create – read – update – delete) را روی آن اجرا کرد
$var_name = $wpdb->get_results("SELECT * FROM $wpdb->users");
در قسمت $wpdb->users اینجا به جدول یوزرها اشاره شده، برای نمایش موقت میتوان از کد زیر استفاده نمود
echo '<pre>';
var_dump($var_name);
echo '</pre>';
یا
echo $var_name[0]->user_login;
میتوان نوع نمایش خروجی را تنظیم کرد
$var_name = $wpdb->get_results("SELECT * FROM $wpdb->users",نوع خروجی);
OBJECT - مقدار پیش فرض
ARRAY_A - خروجی آرایه کلید و مقدار
ARRAY_N - خروجی آرایه ایندکس و مقدار
اگر خروجی روی ARRAY_A تنظیم بشه برای نمایش به صورت زیر عمل میکنیم
echo $var_name[0]['user_login'];
اگر خروجی روی ARRAY_N تنظیم بشه برای نمایش به صورت زیر عمل میکنیم
echo $var_name[0][1];
برای نمایش با استفاده از حلقه
foreach ($var_name as $item) {
echo $item->user_login;
}
جدول های غیر رسمی
برای انتخاب جدول هایی که پیش فرض وردپرس نیستند ابتدا در یک متغیر، prefix (همان پیشوند جدول که در ابتدای نصب تنظیم میکنیم که به صورت پیش فرض wp است) جداول را با نام جدول جمع میکنیم
$var_name = $wpdb->prefix .'my_table_name';$var_name2 = $wpdb->get_results("SELECT * FROM {$var_name}");echo '<pre>';var_dump($var_name2); echo '</pre>';
برای گرفتن یک ردیف از get_row استفاده میکنیم
$var_name = $wpdb->prefix .'my_table_name';
$var_name2 = $wpdb->get_row("SELECT * FROM {$var_name} WHERE id = 1");
echo '<pre>';
var_dump($var_name2);
echo '</pre>';
*اگر از شرط استفاده نشود اولین سطر یا ردیف را برمیگرداند
*در این حالت میتواند نوع خروجی را مشخص کرد
برای گرفتن یک ردیف از get_col استفاده میکنیم
$var_name2 = $wpdb->get_col("SELECT column_name FROM {$var_name} WHERE id = 1",row_number);
column_name نام ستونی که میخواهیم اطلاعات را دریافت کنیم
row_number یعنی میتوان به آن مقدار عددی داد و از ان ردیف به بعد را در خروجی نمایش میدهد
get_var
زمانی که میخواهیم مثلا تعداد کاربران یا جمع سبد خرید یا میانگین بگیریم از get_var استفاده میکنیم
$var_name = $wpdb->get_var("SELECT COUNT(*) FROM {$table_name}");
echo $var_name;
یا مثلا برای جمع قیمت ها
$var_name = $wpdb->get_var("SELECT SUM(price col name) FROM {$table_name}");
*در اینحالت هم میتوان از row offset , colum offset استفاده کرد
insert کردن دیتا
متد prepare تا 99.99 درصد از sql injection جلوگیری میکنه
$name = 'عرفان';
$family = 'حسنی';
$tel = 1234567890;
$var_name = $wpdb->query($wpdb->prepare("INSERT INTO {$table_name} (name,family,tel) VALUES (%s,%s,%d)",$name,$family,$tel));
*name,family,tel این مقادیر نام ستون هایی هستن که در دیتابیس تعریف کردیم
*(%s,%s,%d) دراین قسمت اعتبار سنجی نوع داده ها را انجام میدیم یعنی %s یعنی استرینگ، %d یعنی اینتیجر و %f یعنی اعشاری یا فلوت
مقادیر ورودی را به صورت آرایه نیز میتوان پاس داد
$var_name = $wpdb->query($wpdb->prepare("INSERT INTO {$table_name} (name,family,tel) VALUES (%s,%s,%d)",[$name,$family,$tel]));
ولی حالت بهینه به صورت زیر میباشد
$data = ['name'=>$name,'family'=>$family,'tel'=>$tel];
$format = ['%s','%s','%d'];
$var_name = $wpdb->insert($table_name,$data,$format);
echo $wpdb->insert_id;
echo $wpdb->insert_id; آخرین آیدی را که insert شده را برمیگرداند
بروز رسانی (update)
$id = 23;
$name = 'احسان';
$family = 'کرمی';
$tel = 1234567890;
$var_name = $wpdb->query($wpdb->prepare("UPDATE {$table_name} SET name = %s,family = %s WHERE id = %d AND status = %d",$name,$family,$id,1));
*name,family,tel این مقادیر نام ستون هایی هستن که در دیتابیس تعریف کردیم
ساختار بهینه تر
$data = ['name'=>$name,'family'=>$family];
$where = ['id'=>1,'status' => 1];
$where = ['id'=>$id];
$format = ['%s','%s'];
$where_format = ['%d'];
$var_name = $wpdb->update($table_name,$data,$where,$format,$where_format);
حذف delete
$id = 2;
$var_name = $wpdb->query($wpdb->prepare("DELETE FROM {$table_name} WHERE id = %d ",$id));
حالت بهینه
$id = 2;
$where = ['id'=>$id];
$where_format = ['%d'];
$var_name = $wpdb->delete($table_name,$where,null);
*where , where_format هر دو اختیاری هستند ولی برای امنیت بیشتر بهتر است که تعیین شود
پاکسازی داده های ورودی
sanitize_text_field($var_name);
*$var_name حاوی دیتاهایی که باید پاکسازی شود
برای textarea از حالت زیر استفاده میشود
sanitize_textarea_field();
sanitize_email();
میتوان به صورت تو در تو نیز استفاده کرد مثلا تابع sanitize_text_field را داخل مقدار بالا قرار دهیم
wp_strip_all_tags();
تگ ها را ازبین میبرد
is_email($email);
در وردپرس برای تشخیص ایمیل از تابع بالا استفاده میشود، که مقدار true , false برمیگرداند
sanitize_title();
برای ساخت اسلاگ بیشتر کاربرد دارد و فاصله ها را با – پر میکند
sanitize_user();
برای ساخت نام کاربری استفاده میشه که مقدار true,false برمیگرداند که مشخص میکند این نام کاربری شامل کاراکتر هایی هست که وردپرس پشتیبانی میکنه
*موارد بالا روی وردودی تمرکز دارند و موارد زیر برای چک کردن دیتا هست وقتی از دیتابیس خوانده و میخواهد نمایش داده شود
esc_html(data);
تگ ها و کاراکتر ها را از کار می اندازد
esc_url();
اگر مقادیر مخرب در url باشد آن را حذف میکند
esc_js();
ایمن کردن js وقتی روی یک لینک کلیک میشود و یک کد js اجرا میکند
esc_attr();
زمانی که میخواهیم یک attribute را مقدار دهی کنیم از این تابع استفاده میکنیم
esc_textarea();
مثل تابع قبل ولی برای textarea چون چند خطی است
*این موارد esc در توسعه قالب و افزونه برای جلوگیری از xss , injection مهم هستند