دوستان وقتی فیلدهای فرم زیاد بشن، نوشتن یه کوئری آپدیت زمان بر می شه. یه تابع می شناسید که مقادیری که باید آپدیت بشن رو به همراه شرط بهش بدیم و کوئری کامل رو بگیریم؟
دوستان وقتی فیلدهای فرم زیاد بشن، نوشتن یه کوئری آپدیت زمان بر می شه. یه تابع می شناسید که مقادیری که باید آپدیت بشن رو به همراه شرط بهش بدیم و کوئری کامل رو بگیریم؟
// 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')
آخرین ویرایش به وسیله MMSHFE : پنج شنبه 15 دی 1390 در 09:39 صبح دلیل: بهینه سازی کد
توی این تابع دلیل استفاده از { } چیه؟
اگر کوئری چند شرط داشت باید چیکار کرد؟
// 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')
کد رو کمی تغییر دادم تا بشه شرطهای ترکیبی هم ایجاد کرد و ضمناً مقدار جدید رو هم بشه با استفاده از مقادیر قبلی محاسبه کنیم. لطفاً به نحوه استفاده از کد دقت کنید.
درمورد {} هم باید بگم که خیلی ضروری نیست ولی در مواقعی که داخل رشته ها بخوایم از آرایه ها استفاده کنیم، باید اونها رو داخل {} بگذاریم و چون من زیاد از این حالتها استفاده میکنم، عادت کردم برای متغیرهای معمولی هم اونها رو بگذارم که اگه یک موقع خواستم با آرایه جایگزین کنم، {} یادم نره. ضمناً اینطوری خوانایی کد هم بالاتر میره و راحت میتونم بفهمم کجاها متغیر گذاشتم.
موفق باشید.
فرض کنید بخوایم یه رشته که حاوی آرایه هست رو نمایش بدیم. در این صورت باید چیکار کرد؟ لطفا یه کد با { } بذارید.درمورد {} هم باید بگم که خیلی ضروری نیست ولی در مواقعی که داخل رشته ها بخوایم از آرایه ها استفاده کنیم، باید اونها رو داخل {} بگذاریم
میشه دقیقتر منظورتون رو بگین؟
{} برای این استفاده میشه که بخوایم متغیر رو از متن جدا کنیم. در حالاتی که ادغام متغیر و متن اشکال ایجاد میکنه مثل نمونهی زیر:
$year = 13;
echo "Year: $year90"; // Undefined variable $year90
echo "Year: {$year}90"; // Year: 1390
شما می گید وقتی بخوایم آرایه رو توی رشته قرار بدیم، بهتره از {} استفاده کنیم.
حالا فرض کنید یه آرایه رو توی یه رشته گذاشتیم و بخوایم این رشته رو نمایش بدیم. چه کدی باید استفاده کنیم؟
به این مثال دقت کنید:
$test = array('name'=>'ali', 'grade'=>20);
echo "$test['name'], $test['grade']<br/>";
echo "{$test['name']}, {$test['grade']}<br/>";
?>
یکبار کد بالا رو اجرا کنید. حالا خط دوم رو بصورت Comment در بیارین. متوجه تفاوتشون خواهید شد.
اگه به این صورت هم بنویسیم مشکلی پیش نمی یاد
echo "$test[name], $test[grade]";
بنظرم این موضوع برای نمایش آرایه مناسب نیست و توی بعضی از کلاسها استفاده از { } مفید واقع می شه.
راستشو بخواین این روش رو خودم هم قبلاً استفاده میکردم ولی توی کامنتهای زیر توضیحات توابع در سایت php.net خوندم که این روش باعث میشه که اندیس بصورت آبجکت درنظر گرفته بشه و نه رشته و یک مرحله تفسیر و تعیین نوع اندیس اضافه میشه. البته الآن لینک دقیق صفحه ای که این مطلب رو توش خوندم یادم نیست ولی خودم با Benchmark تست کردم و دیدم واقعاً توی سرعت تأثیر داره. البته تأثیر اصلی توی حلقه ها و تعداد دفعات زیاد فراخوانی خودش رو نشون میده و حتی در برخی موارد تا 2-3 ثانیه اختلاف زمانی داشتم. درنتیجه تصمیم گرفتم از {} و اندیس رشته ای استفاده کنم.
موفق باشید.
برای تست سرعت چه برنامه ای وجود داره؟
می خوام سرعت دقیق اجرای اسکریپتهام رو بدست بیارم.
راستش چندتا برنامه برای این کار وجود داره ولی من خودم از تابع microtime در PHP برای این کار استفاده میکنم. قبل از اجرای دستورات، با کمک این تابع زمان رو برحسب میلیونیم ثانیه میریزم توی یک متغیر و بعد از اجرای دستورات هم از این تابع برای ذخیره زمان توی یک متغیر دیگه استفاده میکنم و با محاسبه تفاضل این دو مقدار، زمان اجرای اسکریپت رو محاسبه میکنم.
موفق باشید.
منظورم برنامه هایی هست که بتونن بغیر از زمان، یه سری اطلاعات دیگه هم بهمون بدن. تابع میکروتایم فقط زمان رو می ده و اطلاعات مفید جانبی دیگه ای بهمون نمی ده.
شما برای این کار چه برنامه هایی رو بهتر می دونید؟