بسم الله الرحمن الرحیم

انجمن های تخصصی کدباکس

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

امروز چهارشنبه 19 سپتامبر 18, 1:01 am



مبحث جدیدپاسخ

 [ 9 پست ] 
نويسنده پيغام
پستارسال شده در: سه شنبه 13 دسامبر 16, 11:22 am 

پست ها : 2
سپاسگذاری کرده: 0 بار
سپاس دریافتی: 0 بار
با استفاده از دستورات آماده prepared statments میتوانید کوئری های تکراری را به دفعات زیاد اجرا کنید.
بدین صورت که با استفاده از دستور اماده یک قالب کوئری sql ایجاد کرده و به پایگاه داده ارسال میکنیم تا پس از تجزیه و کامپایل شدن و بهینه سازی بدون اجرا در پایگاه داده ذخیره شود
سپس میتوانیم مقادیر دلخواه را به پارامتر های کوئری الحاق bind کنیم و با دستور execute کوئری را اجرا کنیم.
از مزیت های این روش این است که نیاز نیست هربار کوئری را به پایگاه داده ارسال کنیم از این رو زمان محاسبه و تجزیه و اجرای یک کوئری کاهش می یابد و از آنجایی که فقط پارامتر ها را ارسال میکنیم و فقط یک بار کوئری را ارسال میکنیم؛ پهنای باند کمتری نیز مصرف می شود.
از نظر امنیت نیز prepared statments برای مقابله با حملات sql injection یا تزریق sql کارامد است.


پستارسال شده در: سه شنبه 13 دسامبر 16, 11:27 am 
نماد کاربر

پست ها : 371
محل سکونت: فارس
سپاسگذاری کرده: 41 بار
سپاس دریافتی: 576 بار
گل اندام جان ، میشه در خصوص استفاده از دستورات آماده در php برای ثبت اطلاعات در پایگاه داده مثال هم بزنید. مشتاقم ببینم چطور میشه در مصرف پهنای باند و نوشتن مجدد کوئری ها صرفه جویی کرد.


پستارسال شده در: سه شنبه 13 دسامبر 16, 11:36 am 

پست ها : 2
سپاسگذاری کرده: 0 بار
سپاس دریافتی: 0 بار
Hoseyn نوشته است:
گل اندام جان ، میشه در خصوص استفاده از دستورات آماده در php برای ثبت اطلاعات در پایگاه داده مثال هم بزنید. مشتاقم ببینم چطور میشه در مصرف پهنای باند و نوشتن مجدد کوئری ها صرفه جویی کرد.

درود بر شما عضو فعال انجمن
کد:
//نوشتن یکباره کوئری
$stmt = $conn->prepare("INSERT INTO tabelname (firstname, lastname, email) VALUES (?, ?, ?)");
//الحاق کردن پارامتر ها
$stmt->bind_param("sss", $firstname, $lastname, $email);

// تنظیم پارامترهای دلخواه و اجرا
$firstname = "golandam";
$lastname = "sadeghi";
$email = "goliandam@example.com";
$stmt->execute();

$firstname = "golpasand";
$lastname = "shafeei";
$email = "golpasand@example.com";
$stmt->execute();

$firstname = "golrokh";
$lastname = "naseri";
$email = "goli@example.com";
$stmt->execute();

echo "New records created successfully";

$stmt->close();

در مثال بالا ما از علامت سوال استفاده کردیم. در ادامه این علامت سوال میتواند با اعداد صحیح integer یا رشته string یا عدد اعشاری double یا داده های بزرگ BLOB جایگزین شود.
و در تابع bind_param() پارامتر ها به کوئری الحاق شدند و برای این که نوع پارامتر ها هم مشخص شود در آرگومان اول اول حروف نوع پارامتر ها را به صورت متوالی مینویسیم. در مثال بالا "sss" که آرگومان اول است نشانگر این مهم است که هر سه مقدار رشته ای string است.


پستارسال شده در: سه شنبه 13 دسامبر 16, 11:57 am 

پست ها : 2
سپاسگذاری کرده: 0 بار
سپاس دریافتی: 0 بار
جالب بود. داده هایی که با این روش به پایگاه داده ارسال میشن چطوری استور میشن ؟ چه تفاوتی میکنند؟
مثلا تو همین مثال بالا چطور ذخیره شدند و اگه جدولمون رو بخوایم به ازای هر ردیف نمایش بدیم چیکار میکنیم ؟


پستارسال شده در: سه شنبه 13 دسامبر 16, 12:01 pm 
نماد کاربر

پست ها : 371
محل سکونت: فارس
سپاسگذاری کرده: 41 بار
سپاس دریافتی: 576 بار
forgiveme نوشته است:
جالب بود. داده هایی که با این روش به پایگاه داده ارسال میشن چطوری استور میشن ؟ چه تفاوتی میکنند؟
مثلا تو همین مثال بالا چطور ذخیره شدند و اگه جدولمون رو بخوایم به ازای هر ردیف نمایش بدیم چیکار میکنیم ؟

دیگه چطوری نداره ، مثل همیشه ، عادی
پيوست:
localhost.png
localhost.png [ 14 KiB | بازديد 2532 بار ]

هیچ فرقی با این که کوئری ها رو هردفعه بنویسیم نداره. همونطور که دوستمون گفتند فقط مزیت دارند.


پستارسال شده در: سه شنبه 13 دسامبر 16, 12:34 pm 
نماد کاربر

پست ها : 371
محل سکونت: فارس
سپاسگذاری کرده: 41 بار
سپاس دریافتی: 576 بار
forgiveme نوشته است:
مثلا تو همین مثال بالا چطور ذخیره شدند و اگه جدولمون رو بخوایم به ازای هر ردیف نمایش بدیم چیکار میکنیم ؟

در مثال بالا ظاهرا گلپسند و گلرخ و گل اندام سه تا دختر خاله هستند   که با استفاده از دستورات آماده در پایگاه داده ثبت شدن.
کد:
$sql = "SELECT id, firstname, lastname, email FROM tablename";
$result = $conn->query($sql);

if ($result->num_rows > 0) {
     // استخراج نتایج هر ردیف
     while($row = $result->fetch_assoc()) {
         echo "<br> id: ". $row["id"]. " - Name : ". $row["firstname"]. " - family : " . $row["lastname"] . " - email : " .$row["email"] . "<br>";
     }
} else {
     echo "0 results";
}

خب اول با دستور SELECT یک کوئری ایجاد میکنیم که ستون های id و firstname و lastname و email انتخاب بشن و در خط بعد نتیجه این کوئری رو با استفاده از تابع query در متغیر result ذخیره میکنیم
حال میخواهیم خروجی این متغیر رو نمایش بدیم و قبلش باید مطئمن بشیم که کوئری ما بدون نتیجه نبوده ، بنابراین با استفاده از تابع num_rows() بررسی میکنیم که ردیف ها بیشتر از صفر باشد.
با استفاده از تابع fetch_assoc() تمام نتایج در یک ارایه انجمنی قرار داده می شود که میتوانیم دستورات حلقه را اجرا کنیم تا ردیف اول برگردانده شود و با هر بار فراخوانی ردیف بعدی برگردانده شود
با هربار فراخوانی تابع fetch_assoc() نتیجه در متغیر $row ذخیره میشود و تا اخر ادامه می یابد


پستارسال شده در: سه شنبه 13 دسامبر 16, 12:35 pm 
نماد کاربر

پست ها : 371
محل سکونت: فارس
سپاسگذاری کرده: 41 بار
سپاس دریافتی: 576 بار
خروجی کد بالا که برای نمایش اطلاعات جدول tablename استفاده کردیم این می شود:
کد:
id: 10 - Name : golandam - family : sadeghi - email : goliandam@example.com

id: 11 - Name : golpasand - family : shafeei - email : golpasand@example.com

id: 12 - Name : golrokh - family : naseri - email : goli@example.com


پستارسال شده در: پنج شنبه 15 دسامبر 16, 11:08 am 

پست ها : 3
سپاسگذاری کرده: 0 بار
سپاس دریافتی: 0 بار
حالا اگه بخوایم سه ردیف بعد از ردیف 5 جدول رو نمایش بدیم باید چیکار کنیم ؟


پستارسال شده در: پنج شنبه 15 دسامبر 16, 11:10 am 
نماد کاربر

پست ها : 371
محل سکونت: فارس
سپاسگذاری کرده: 41 بار
سپاس دریافتی: 576 بار
neagan نوشته است:
حالا اگه بخوایم سه ردیف بعد از ردیف 5 جدول رو نمایش بدیم باید چیکار کنیم ؟


سوال خوبی بود
مثل نمایش کل جدول عمل میکنیم ، فقط هنگام انتخاب SELECT باید به روش زیر عمل کنیم :
کد:
$sql = "SELECT * FROM Tablename LIMIT 3 OFFSET 5";

بعد از LIMIT تعداد رکورد هایی که میخوایم انتخاب بشه و بعد از OFFSET ردیفی که میخوایم از اون به بعد انتخاب بشه


نمايش پست ها از پيشين:  مرتب سازي بر اساس  

مبحث جدیدپاسخ

 [ 9 پست ] 


مباحث مرتبط

 مباحث   نويسنده   پاسخ ها   بازديدها   آخرين پست 
موضوع ناخوانده دیگری در این انجمن موجود نیست. اطلاعات مفید برای پیشرفت سایت

peransidin

0

774

دوشنبه 16 اکتبر 17, 9:37 am

peransidin نمایش آخرین ارسال

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

ehsannasr

0

92

پنج شنبه 12 جولاي 18, 6:41 am

ehsannasr نمایش آخرین ارسال

موضوع ناخوانده دیگری در این انجمن موجود نیست. تفاوت دستورات حلقه در php

salam

2

1805

پنج شنبه 24 نوامبر 16, 5:38 pm

Hoseyn نمایش آخرین ارسال

موضوع ناخوانده دیگری در این انجمن موجود نیست. تفاوت های دستورات شرطی در php

salam

3

1970

سه شنبه 22 نوامبر 16, 7:11 pm

Hoseyn نمایش آخرین ارسال

موضوع ناخوانده دیگری در این انجمن موجود نیست. دستورات لایت اسپید litespeed

Hoseyn

0

2522

جمعه 12 ژوئن 15, 3:10 pm

Hoseyn نمایش آخرین ارسال

 


چه کسي حاضر است ؟

کاربران حاضر در اين انجمن: بدون كاربران آنلاين و 2 مهمان


شما نمي توانيد مبحث جديدي در اين انجمن ايجاد کنيد
شما نمي توانيد به مباحث در اين انجمن پاسخ دهيد
شما نمي توانيد پست هاي خود را در اين انجمن ويرايش کنيد
شما نمي توانيد پست هاي خود را در اين انجمن حذف کنيد
شما نمي توانيد فايل هاي پيوست در اين انجمن ارسال کنيد
cron



بخش ها