نمایش نتایج 1 تا 14 از 14

نام تاپیک: یه تابع برای ایجاد کوئری مربوط به آپدیت

  1. #1

    Question یه تابع برای ایجاد کوئری مربوط به آپدیت

    دوستان وقتی فیلدهای فرم زیاد بشن، نوشتن یه کوئری آپدیت زمان بر می شه. یه تابع می شناسید که مقادیری که باید آپدیت بشن رو به همراه شرط بهش بدیم و کوئری کامل رو بگیریم؟

  2. #2

    نقل قول: یه تابع برای ایجاد کوئری مربوط به آپدیت


    // 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 صبح دلیل: بهینه سازی کد

  3. #3

    نقل قول: یه تابع برای ایجاد کوئری مربوط به آپدیت

    توی این تابع دلیل استفاده از { } چیه؟

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

  4. #4

    نقل قول: یه تابع برای ایجاد کوئری مربوط به آپدیت


    // 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')

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

  5. #5

    نقل قول: یه تابع برای ایجاد کوئری مربوط به آپدیت

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

  6. #6

    نقل قول: یه تابع برای ایجاد کوئری مربوط به آپدیت

    میشه دقیقتر منظورتون رو بگین؟

  7. #7

    نقل قول: یه تابع برای ایجاد کوئری مربوط به آپدیت

    {} برای این استفاده میشه که بخوایم متغیر رو از متن جدا کنیم. در حالاتی که ادغام متغیر و متن اشکال ایجاد میکنه مثل نمونه‌ی زیر:
    $year = 13;
    echo "Year: $year90"; // Undefined variable $year90
    echo "Year: {$year}90"; // Year: 1390

  8. #8

    نقل قول: یه تابع برای ایجاد کوئری مربوط به آپدیت

    شما می گید وقتی بخوایم آرایه رو توی رشته قرار بدیم، بهتره از {} استفاده کنیم.

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

  9. #9

    نقل قول: یه تابع برای ایجاد کوئری مربوط به آپدیت

    به این مثال دقت کنید:

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

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

  10. #10

    نقل قول: یه تابع برای ایجاد کوئری مربوط به آپدیت

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

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

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

  11. #11

    نقل قول: یه تابع برای ایجاد کوئری مربوط به آپدیت

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

  12. #12

    نقل قول: یه تابع برای ایجاد کوئری مربوط به آپدیت

    برای تست سرعت چه برنامه ای وجود داره؟

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

  13. #13

    نقل قول: یه تابع برای ایجاد کوئری مربوط به آپدیت

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

  14. #14

    نقل قول: یه تابع برای ایجاد کوئری مربوط به آپدیت

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

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

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •