</>مدرسه زیب‌موجیاد بگیر، تمرین کن، بساز
مدرسهPHPدرس 15
درس 15 از 26 · ۶۰ دقیقه

PDO و دستور آماده؛ داده را به SQL نچسبان

PDO راه یکسان و قابل‌کنترلی برای ارتباط PHP با پایگاه داده می‌دهد. مهم‌ترین عادت این درس جدا نگه‌داشتن متن SQL از مقدارهایی است که کاربر فرستاده.

۰امتیاز شما
نقشه این درس

بعد از این درس دقیقاً چه بلدی؟

  • می‌توانی «اتصال PDO» را با مثال همین درس توضیح بدهی.
  • می‌دانی «prepare» کجای مسئله به کار می‌آید.
  • تغییر پیشنهادی درس را اجرا می‌کنی و از روی نتیجه، اشتباه را پیدا می‌کنی.
به زبان زندگی واقعی

فرم بانکی با خانه‌های ثابت

ساختار فرم از قبل چاپ شده و مشتری فقط مقدار هر خانه را می‌نویسد. Prepared statement هم ساختار SQL را ثابت نگه می‌دارد و داده را جدا وارد می‌کند.

نکته مهم برای شروع PHP

PDO راه یکسان و قابل‌کنترلی برای ارتباط PHP با پایگاه داده می‌دهد. مهم‌ترین عادت این درس جدا نگه‌داشتن متن SQL از مقدارهایی است که کاربر فرستاده.

چرا مهم است؟ ایمیل از فرم می‌آید. آن را مستقیم به SQL نمی‌چسبانیم؛ Query را آماده می‌کنیم و مقدار را جدا می‌فرستیم.

اولین تمرین تو: ایمیل از فرم می‌آید. آن را مستقیم به SQL نمی‌چسبانیم؛ Query را آماده می‌کنیم و مقدار را جدا می‌فرستیم.

مفهوم‌های اصلی

اول بفهم، بعد کد بنویس

اتصال PDO

با DSN و تنظیم حالت Exception یک ارتباط قابل مدیریت می‌سازیم.

prepare

دستور SQL را با جای‌نگهدارهایی مثل :email آماده می‌کند.

execute

مقدارها را جداگانه به جای‌نگهدارها می‌دهد و جلوی تغییر ساختار Query را می‌گیرد.

سناریوی واقعی

پیداکردن کاربر با ایمیل

ایمیل از فرم می‌آید. آن را مستقیم به SQL نمی‌چسبانیم؛ Query را آماده می‌کنیم و مقدار را جدا می‌فرستیم.

موقعیتتصمیم برنامهنتیجه قابل دیدن
بازی ساختن کد

قطعه‌ها را به ترتیب درست بچین

روی هر قطعه بزن تا وارد پاسخ شود؛ برای برگرداندن دوباره روی آن بزن. با دکمه‌های جابه‌جایی هم می‌توانی بدون کشیدن و رهاکردن ترتیب را اصلاح کنی.

مرحله ۲ از ۳ · مرتب‌کردن کد
بانک قطعه‌هاقطعه مناسب را انتخاب کن
ترتیب پاسخ تواز بالا به پایین اجرا می‌شود

    هنوز پاسخی بررسی نشده است.

    کارگاه تعاملی

    کد را کامل کن و ساختار آن را بررسی کن

    این درس وارد قابلیت‌های سروری یا حرفه‌ای شده است. برای امنیت سایت، کد دلخواه روی سرور اجرا نمی‌شود؛ بررسی‌گر، وجود اجزای ضروری و منطق مورد انتظار را کنترل می‌کند و راهنمای اصلاح می‌دهد.

    lesson-15.php
    گزارش بررسیبررسی‌گر ساختار آماده است
    کد را کامل کن و «بررسی ساختار» را بزن.
    در مثال‌های پیشرفته، اجرای ناامن سروری نداریم؛ اجزای ضروری کد بررسی می‌شوند.
    کدخوانی استاد

    این مثال خط‌به‌خط چه می‌گوید؟

    فعلاً حفظ نکن؛ هر خط را به یک جمله ساده تبدیل کن.

    1. 1<?php

      از اینجا مفسر PHP شروع به خواندن کد می‌کند.

    2. 2$stmt = $pdo->prepare(

      یک مقدار با نام $stmt نگه‌داری می‌شود تا در خط‌های بعد دوباره استفاده شود.

    3. 3"SELECT id, name FROM users WHERE email = :email"

      این خط بخشی از منطق اصلی مثال است؛ نام‌ها و علامت‌ها را از راست به چپ، بخش‌به‌بخش بخوان.

    4. 4);

      مرز یک بلوک یا فراخوانی در اینجا باز یا بسته می‌شود.

    5. 5$stmt->execute(["email" => $email]);

      این خط بخشی از منطق اصلی مثال است؛ نام‌ها و علامت‌ها را از راست به چپ، بخش‌به‌بخش بخوان.

    6. 6$user = $stmt->fetch(PDO::FETCH_ASSOC);

      یک مقدار با نام $user نگه‌داری می‌شود تا در خط‌های بعد دوباره استفاده شود.

    منبع رسمی همین درسمستندات اصلی PHP را ببین ←برای عمیق‌ترشدن؛ لازم نیست در شروع همه آن را بخوانی.
    حالا نوبت توست

    جای‌نگهدار :email را در یکی از دو محل عمداً :mail کن و خطای اجرای Query را بررسی کن.

    تمرین پلکانی

    از ساده به چالشی، بدون پرش

    ۱ · گرم‌کردن

    یکی از مقدارهای مثال را عوض کن، خروجی را روی کاغذ حدس بزن و سپس بررسی کن.

    ۲ · تثبیت

    جای‌نگهدار :email را در یکی از دو محل عمداً :mail کن و خطای اجرای Query را بررسی کن.

    ۳ · ساختن

    سناریوی «پیداکردن کاربر با ایمیل» را با نام‌های واضح‌تر و یک حالت تازه گسترش بده.

    دام‌های رایج

    این سه اشتباه را انجام نده

    1

    ورودی را با نقطه به رشته SQL می‌چسبانی.

    2

    رمز دیتابیس را داخل مخزن عمومی می‌گذاری.

    3

    پیام کامل خطای دیتابیس را در سایت اصلی به کاربر نشان می‌دهی.

    آزمون پایان درس

    5 پرسش کوتاه؛ مطمئن شو واقعاً یاد گرفته‌ای

    برای هر پرسش یک پاسخ انتخاب کن. بعد از هر انتخاب، دلیل پاسخ را همان‌جا می‌بینی.

    پرسش 1 از 5

    کدام روش ورودی را از ساختار SQL جدا می‌کند؟

    پرسش 2 از 5

    کدام توضیح، «اتصال PDO» را دقیق‌تر بیان می‌کند؟

    پرسش 3 از 5

    بهترین قدم بعد از خواندن مثال این درس چیست؟

    پرسش 4 از 5

    کدام روش نشان می‌دهد این درس را واقعاً فهمیده‌ای؟

    پرسش 5 از 5

    کدام رفتار احتمال خطا را در همین موضوع بیشتر می‌کند؟

    پایان درس 15

    درس را فقط وقتی تمام کن که کد را تغییر داده‌ای

    دیدن آموزش کافی نیست؛ یک مقدار را تغییر بده، خروجی را پیش‌بینی کن و بعد اجرا بزن.