PDA

View Full Version : سوال: یه تابع برای ایجاد کوئری مربوط به آپدیت



idocsidocs
پنج شنبه 15 دی 1390, 02:20 صبح
دوستان وقتی فیلدهای فرم زیاد بشن، نوشتن یه کوئری آپدیت زمان بر می شه. یه تابع می شناسید که مقادیری که باید آپدیت بشن رو به همراه شرط بهش بدیم و کوئری کامل رو بگیریم؟

MMSHFE
پنج شنبه 15 دی 1390, 07:38 صبح
// Function
function UpdateQuery($table, $values, $id) {
$query = '';
if(is_array($values)) {
$query = "UPDATE `{$table}` SET ";
$count = count($values);
$i = 0;
foreach($values as $key=>$value) {
$query .= "`{$key}`='{$value}'";
if($i < ($count - 1)) {
$query .= ',';
}
$i++;
}
$query .= " WHERE (`id`='{$id}')";
}
return $query;
}
// Usage
$query = UpdateQuery('grades', array('name'=>'ali', 'grade'=>'15'), 5);
// $query is now : UPDATE `grades` SET `name`='ali',`grade`='15' WHERE (`id`='5')

idocsidocs
پنج شنبه 15 دی 1390, 10:41 صبح
توی این تابع دلیل استفاده از { } چیه؟

اگر کوئری چند شرط داشت باید چیکار کرد؟

MMSHFE
پنج شنبه 15 دی 1390, 11:02 صبح
// Function
function UpdateQuery($table, $values, $conditions) {
$query = '';
if(is_array($values) && is_array($conditions)) {
$query = "UPDATE `{$table}` SET ";
$count = count($values);
$i = 0;
foreach($values as $value) {
$query .= "{$value}";
if($i < ($count - 1)) {
$query .= ',';
}
$i++;
}
$query .= " WHERE (";
$count = count($conditions);
$i = 0;
foreach($conditions as $condition) {
$query .= "{$condition}";
if($i < ($count - 1)) {
$query .= ' AND ';
}
$i++;
}
$query .= ')';
}
return $query;
}
// Usage
$query = UpdateQuery('grades', array('`grade`=`grade`+\'2\''), array('`grade`>\'15\'', '`term`=\'1\'', '`year`=\'1390\''));
echo $query;
// $query is now : UPDATE `grades` SET `grade`=`grade`+'2' WHERE (`grade`>'15' AND `term`='1' AND `year`='1390')

کد رو کمی تغییر دادم تا بشه شرطهای ترکیبی هم ایجاد کرد و ضمناً مقدار جدید رو هم بشه با استفاده از مقادیر قبلی محاسبه کنیم. لطفاً به نحوه استفاده از کد دقت کنید.
درمورد {} هم باید بگم که خیلی ضروری نیست ولی در مواقعی که داخل رشته ها بخوایم از آرایه ها استفاده کنیم، باید اونها رو داخل {} بگذاریم و چون من زیاد از این حالتها استفاده میکنم، عادت کردم برای متغیرهای معمولی هم اونها رو بگذارم که اگه یک موقع خواستم با آرایه جایگزین کنم، {} یادم نره. ضمناً اینطوری خوانایی کد هم بالاتر میره و راحت میتونم بفهمم کجاها متغیر گذاشتم.
موفق باشید.

idocsidocs
پنج شنبه 15 دی 1390, 11:21 صبح
درمورد {} هم باید بگم که خیلی ضروری نیست ولی در مواقعی که داخل رشته ها بخوایم از آرایه ها استفاده کنیم، باید اونها رو داخل {} بگذاریم
فرض کنید بخوایم یه رشته که حاوی آرایه هست رو نمایش بدیم. در این صورت باید چیکار کرد؟ لطفا یه کد با { } بذارید.

MMSHFE
پنج شنبه 15 دی 1390, 11:46 صبح
میشه دقیقتر منظورتون رو بگین؟

امیـرحسین
پنج شنبه 15 دی 1390, 11:54 صبح
{} برای این استفاده میشه که بخوایم متغیر رو از متن جدا کنیم. در حالاتی که ادغام متغیر و متن اشکال ایجاد میکنه مثل نمونه‌ی زیر:

$year = 13;
echo "Year: $year90"; // Undefined variable $year90
echo "Year: {$year}90"; // Year: 1390

idocsidocs
پنج شنبه 15 دی 1390, 11:54 صبح
شما می گید وقتی بخوایم آرایه رو توی رشته قرار بدیم، بهتره از {} استفاده کنیم.

حالا فرض کنید یه آرایه رو توی یه رشته گذاشتیم و بخوایم این رشته رو نمایش بدیم. چه کدی باید استفاده کنیم؟

MMSHFE
پنج شنبه 15 دی 1390, 12:08 عصر
به این مثال دقت کنید:


$test = array('name'=>'ali', 'grade'=>20);
echo "$test['name'], $test['grade']<br/>";
echo "{$test['name']}, {$test['grade']}<br/>";
?>

یکبار کد بالا رو اجرا کنید. حالا خط دوم رو بصورت Comment در بیارین. متوجه تفاوتشون خواهید شد.

idocsidocs
پنج شنبه 15 دی 1390, 12:24 عصر
اگه به این صورت هم بنویسیم مشکلی پیش نمی یاد


echo "$test[name], $test[grade]";

بنظرم این موضوع برای نمایش آرایه مناسب نیست و توی بعضی از کلاسها استفاده از { } مفید واقع می شه.

MMSHFE
پنج شنبه 15 دی 1390, 17:55 عصر
راستشو بخواین این روش رو خودم هم قبلاً استفاده میکردم ولی توی کامنتهای زیر توضیحات توابع در سایت php.net خوندم که این روش باعث میشه که اندیس بصورت آبجکت درنظر گرفته بشه و نه رشته و یک مرحله تفسیر و تعیین نوع اندیس اضافه میشه. البته الآن لینک دقیق صفحه ای که این مطلب رو توش خوندم یادم نیست ولی خودم با Benchmark تست کردم و دیدم واقعاً توی سرعت تأثیر داره. البته تأثیر اصلی توی حلقه ها و تعداد دفعات زیاد فراخوانی خودش رو نشون میده و حتی در برخی موارد تا 2-3 ثانیه اختلاف زمانی داشتم. درنتیجه تصمیم گرفتم از {} و اندیس رشته ای استفاده کنم.
موفق باشید.

idocsidocs
پنج شنبه 15 دی 1390, 18:08 عصر
برای تست سرعت چه برنامه ای وجود داره؟

می خوام سرعت دقیق اجرای اسکریپتهام رو بدست بیارم.

MMSHFE
جمعه 16 دی 1390, 10:09 صبح
راستش چندتا برنامه برای این کار وجود داره ولی من خودم از تابع microtime در PHP برای این کار استفاده میکنم. قبل از اجرای دستورات، با کمک این تابع زمان رو برحسب میلیونیم ثانیه میریزم توی یک متغیر و بعد از اجرای دستورات هم از این تابع برای ذخیره زمان توی یک متغیر دیگه استفاده میکنم و با محاسبه تفاضل این دو مقدار، زمان اجرای اسکریپت رو محاسبه میکنم.
موفق باشید.

idocsidocs
جمعه 16 دی 1390, 10:50 صبح
منظورم برنامه هایی هست که بتونن بغیر از زمان، یه سری اطلاعات دیگه هم بهمون بدن. تابع میکروتایم فقط زمان رو می ده و اطلاعات مفید جانبی دیگه ای بهمون نمی ده.

شما برای این کار چه برنامه هایی رو بهتر می دونید؟