اتصال به دیتابیس با mysqli


در آموزش اتصال به دیتابیس با mysqli ، قصد داریم نحوه پیادی سازی عملیات CRUD توسط MYSQLi و prepared statement را یاد بگیریم

Mysqli چیست ؟

در نسخه های قدیمی تر PHP مثل PHP4 از mysql استفاده میشد و کاملا برای تمامی برنامه نویس ها جا افتاده بود. اما در نسخه های جدید php یعنی در حال حاضر  PHP7 و PHP5.6 برای کار با دیتابیس از افزونه پیشرفته تری استفاده میشه. این افزونه که بهینه شده ی MySql هست MySqli نامگذاری شده. (افزونه PDO برای اتصال به انواع دیتابیس ها در PHP)

  • در این ماژول شما میتونید هم بصورت شی گرایی یا  Object Oriented کار کنید هم بصورت  Procedural . البته روش شی گرایی انعطاف پذیر تر هست و شما راحت تر میتونید باهاش کار کنید.
  • MySqli فقط با دیتابیس MySql سازگاری داره.
  • MySqli میتونه Stored Procedure رو هم Call کنه که این از نظر  Sql Injection امنیت شمارو تامین میکنه.
  •  MySqli توسعه یافته ی MySql هست و طبق تجارت بدست اومده سرعت عملکردش از PDO هم بیشتره.
  • اگر کنترل پنل شما ویندوز و یا لینوکس باشه ، MySqli بطور کامل روی کنترل پنلتون نصب هست و نیازی به نصب ندارید.

نکته : اگر Procedural یا همان رویه ای کار می کنید تفاوتی بین  MySql و  MySqli نمیبینید جر اینکه حرف i به دستورات اضافه شده، اما شی گرایی کاملا متفاوت عمل میکنه.

Prepared statement چیست ؟ یک قابلیت برای اجرای کردن یک دستور SQL مشابه به دفعات زیاد و با کارایی بالا است . در واقع دستورات prepare شده یک قالب استاندارد برای دستورات SQL است .

استفاده از دستورات از پیش تعیین شده یا همان prepared statement از لحاظ کارایی ، سرعت و امنیت ، مزیت های زیادی دارد . با استفاده از این متد ، کوئری برای بار اول کامپایل شده و منابع مورد نظر ساخته و در دستورات prepare شده ذخیره می شوند . این شئ (object) برای دفعات بعد در کدهایمان استفاده می شوند که باعث کاهش زمان اجرا (execute) می شوند.

اتصال به دیتابیس با mysqli

در این مثال از اتصال به دیتابیس با mysqli، من یک جدول employee در دیتابیس با عملیات CRUD می سازم . ما به دیتابیس متصل و یک کوئری را برای INSERT ،UPDATE، DELETE، SELECT آماده می کنیم .

بعد اگر نیاز بود ، مقادیر را به پارامتر های کوئری ، Bind میکنیم . در مقاله قبلی در مورد آموزش pdo در php دیدم.

 

Create توسط prepared Statement

این کد از اتصال به دیتابیس با mysqli ، به شما یک فرم HTML برای ثبت یک سطر جدید در دیتابیس را نشان می دهد. سه فیلد برای جمعاوری اطلاعات کارکنان (employee) وجود دارد . با ارسال (submit) این فرم ، داده فیلد های این فرم به صفحه php ارسال می شود.

در کد php ، دستور sql برای insert و bind کردن مقادیر فرم به پارامتر های کوئری ایجاد می شود .

حتما بخوانید  رفتن به خط جدید در php با Line Breaks

خواندن سطر ها

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

اتصال به دیتابیس با mysqli

Update توسط prepared Statement

با کلیک بروی گزینه عملیات ویرایش در لیست بالا ، فرم ویرایش کارکنان برای کاربر نمایش داده می شود . بعد از submit داده های ویرایش شده فرم ، prepared Statement برای اجرای دستور update ساخته می شود.

حتما بخوانید  مدیریت فایل ها در php

حذف توسط prepared Statement

در این قسمت از کد php اتصال به دیتابیس با mysqli ، به شما ساخت کوئری delete برای حذف یک سطر از جدول با استفاده از دستورات prepare شده را نشان می دهیم . این صفحه زمانی اجرا می شود که گزینه delete در لیست بالا انتخاب شده باشد . ID کارمند مورد با استفاده از متد GET به این صفحه ارسال می شود . این آی دی در کوئری مورد نظر برای حذف یک سطر مشخص استفاده می شود.

امیدوارم از آموزش اتصال به دیتابیس با mysqli لذت برده باشید.

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

هر سوالی داشتید, از طریق قسمت نظرات ارسال کنید. سریعا, پاسخگوی سوالات شما هستیم.

موفق و پیروز باشید.

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

دیدگاه کاربران

4 پاسخ به “اتصال به دیتابیس با mysqli”

  1. یاسین گفت:

    سلام و خسته نباشید.
    من با استفاده از دستور زیر میام و تعداد تیکت های یک یوزر رو میکشم بیرون :
    require ‘db.php’;
    $check1 = mysqli_query($conn,”SELECT COUNT(*) as ok FROM list WHERE username=’$username'”);
    $row1 = mysqli_fetch_assoc($check1);
    if (mysqli_num_rows($check1)>0) {
    $satr = $row1[“ok”];
    }
    و با این دستور میگم اگه برابر صفر نبود چاپ کنه :
    $check = mysqli_query($conn,”SELECT * FROM command WHERE username=’$username'”);
    $row = mysqli_fetch_assoc($check);
    if (mysqli_num_rows($check)>0) {
    $_SESSION[‘id’] = $row[“id”];
    $_SESSION[‘title’] = $row[“title”];
    $_SESSION[‘pm’] = $row[“pm”];
    $_SESSION[‘lock’] = $row[“lock”];
    }
    ولی فقط متن و موضوع اولی رو نشون میده و بقیه رو نشون نمیده.
    چجوری باید ای دی هر کدوم رو جدا دریافت یا در رشته ای بریزم؟

    با تشکر از سایت خوبتون و خودتون 🙂

    0

    • حسن شفیعی گفت:

      سلام . مرسی . برای اینکار شما باید از حلقه ها استفاده کنید . مثلا من از حلقه while استفاده می کنم و میگم تا زمانی که سطری در جدول بود حلقه ادامه پیدا کنه که در اینصورت همه ی سطر های مربوط به اون یوزر رو میکشه بیرون


      require 'db.php';
      $check1 = mysqli_query($conn,"SELECT COUNT(*) as ok FROM list WHERE username='$username'");
      $row1 = mysqli_fetch_assoc($check1);
      if (mysqli_num_rows($check1)>0) {
      $satr = $row1["ok"];
      }

      $check = mysqli_query($conn,"SELECT * FROM command WHERE username='$username'");
      while($row = mysqli_fetch_assoc($check)){
      if (mysqli_num_rows($check)>0) {
      $_SESSION['id'] = $row["id"];
      $_SESSION['title'] = $row["title"];
      $_SESSION['pm'] = $row["pm"];
      $_SESSION['lock'] = $row["lock"];
      }
      }

      ممنونم . موفق باشید

      1+

  2. mohammad گفت:

    سلام
    برای جلوگیری ازsql injection در mysqli کد خاصی باید نوشت چون دستورات جلوگیری از injection در mysql تو mysqli کار نمیکنه و خطا میده

    0

    • حسن شفیعی گفت:

      سلام . برای جلوگیری از sql injection در استفاده از اکستنشن mysqli هنگام اتصال به دیتابیس بهتر است که مقادیر را مستقیما در کویری خود استفاده نکنید و برای همین کویری sql خود را prepare کنید تا در هنگام bind کردن داده های کاربر در کویری موارد غیرضروری که باعث break شدن دستور sql و بروز باگ sqli میشود جلوگیره بشه .
      به عنوان مثال میتوانید به اینصورت کویری خود را اجرا کنید تا جلوی باگ sql injection گرفته بشه .


      $stmt = mysqli->prepare("SELECT col1 FROM t1 WHERE col2 = ?");
      $stmt->bind_param("s", $col2_arg);
      $stmt->execute();

      همچنین میتوانید در هنگام دریافت مقادیر عددی از دستور intval و شرط های مربوط استفاده کنید تا ورودی های غیر ضروری از داده های دریافتی حذف بشه .
      یکی دیگر از توابع پر کاربر filter_var است که بطور کامل میتوانید ورودی ها را کنترل و حتی قبل از استفاده در کویری sanitize یا همان پاکسازی کنید

      اعتبار سنجی فرم ها در php

      موفق و پیروز باشید

      0

دیدگاهتان را بنویسید

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

جدیدترین آموزش های آنلاین



دانلود رایگان (هدیه ویژه)

کتاب آموزش زبان برنامه نویسی PHP را دانلود و همین امروز یادگیری را شروع کن و به جمع برنامه نویسان ملحق شو ;)

دانلود رایگان کتاب

نظر کاربران عزیز

آموزش های آنلاین در چه زمینه ای تهیه کنیم ؟

نظر شما برای ما بسیار مهم است

Loading ... Loading ...

بخش کاربران

هنوز عضو نیستید ؟ کلیک کنید

دانلود کتاب

عضویت در خبرنامه