همانطور که باید بدانید، برنامهنویسی اکثر پروژهها بدون دیتابیس عملا غیرممکن است. آن هم اگر این پروژه تحت وب باشد! البته نمیگوییم که بدون دیتابیس نمیتوان چیزی ساخت؛ اما طبیعی است که اگر بخواهیم اطلاعاتی را ذخیره کنیم، به دیتابیس نیاز خواهیم داشت.
در این جا ما ابتدا یک کانکش (Connection) به دیتابیس MySQL که از طریق PhpMyAdmin نیز قابل دسترسی است، ایجاد خواهیم کرد؛ و سپس روند کوئری گرفتن یا اجرای دستورات SQL را به شما خواهیم گفت.
ایجاد یک کانکش به یک دیتابیس
برای انجام این کار، کافیست تا یک شی از کلاس mysqli بسازیم.
// $servername = "localhost"; $username = "username"; $password = "password"; $dbname = "myDB" $conn = new mysqli($servername, $username, $password, $dbname); //
ما چهار متغیر تعریف کردهایم که در آنها اطلاعات مورد نیاز برای ساخت یک کانکشن را قرار میدهیم. این چهار متغیر به شرح زیر میباشند:
- servername: اگر بخواهیم از روی هاست فعلی که سورس در آن اجرا میشود دیتابیس را بگیریم، localhost مینویسیم. در غیر این صورت آدرس یا آیپی هاست باید نوشته شود.
- username: نام کاربری ایجاد شده برای دیتابیس
- password: پسورد نام کاربری
- dbname: نام دیتابیس ساخته شده
در نهایت اطلاعات را باید به متد سازندهی کلاس mysqli ارسال کنیم تا آبجکت (کانکشن) دیتابیس برایمان ساخته شود.
بررسی اینکه ارتباط موفق بوده یا نه
پس از ساخت شیءای از کلاس mysqli، بهتر است که بررسی کنیم آیا کانکشن ما به درستی کار میکند یا خیر! یعنی اتصال موفق بوده یا خیر؛ مثلا فرض کنید یکی از ورودیها اشتباه باشد.
// if ($conn->connect_error) { die("Connection failed: " . $conn->connect_error); } //
مقدار connect_error از نوع رشتهای بوده و اگر خطایی به هنگام اتصال به دیتابیس رخ داده باشد، این مقدار null نخواهد بود.
اجرای یک دستور sql یا کوئری زدن به دیتابیس
به صوت زیر میتوان عمل کرد:
// $sql = "SELECT id, firstname, lastname FROM fullkade_users"; $result = $conn->query($sql); //
یعنی از متد query آبجکت کانکشن، برای اجرای دستور sql استفاده میکنیم. اینن متد پس از اجرا، یک خروجی برمیگرداند که در بالا آن را داخل result ریختهایم. همچنین چون دستور SQL از نوع SELECT است، لذا result ممکن است شامل رکوردهای پیدا شده از دیتابیس باشد.
بررسی اینکه آیا رکوردی پیدا شده است یا خیر
حالا اگر کوئری مربوط به دستور SELECT را اجرا کرده باشیم، انتظار این را داریم که رکوردهایی به ما برگردانده شود. اما ممکن است که هیچ رکوردی هم با توجه به شرط دستور پیدا نشده باشد! لذا برای تشخیص اینکه آیا رکوردی وجود دارد یا خیر، میتوان به صورت زیر عمل کرد:
// if ($result->num_rows > 0) { } //
پس از num_rows برای گرفتن تعداد رکوردها استفاده میکنیم.
دسترسی به رکوردها – چاپ نتایج
اگر رکوردی وجود داشته باشد، طبیعتا میخواهیم از آنها استفاده کنیم! چرا که در غیر این صورت، کوئری و کد ما بی فایده بوده است. بدین منظور به صورت زیر عمل میکنیم:
// while($row = $result->fetch_assoc()) { echo "id: " . $row["id"]. " - Name: " . $row["firstname"]. " " . $row["lastname"]. "<br>"; } //
یک حلقهی while نوشتهایم که تا زمان درست بودن شرط داخل آن اجرا میشود. این حلقه برای خواندن یک به یک رکوردها (سطرها) نوشته شده است. اما شرط آن این است که هربار سطری از result را به دست آورده و داخل متغیر row قرار میدهد. getch_assoc هربار که اجرا میشود، یک سطر جدیدی را برمیگرداند؛ لذا اگر سطر جدیدی وجود نداشته باشد، مقدار null برگردانده خواهد شد و از این رو شرطمان دیگر true نخواهد بود.
متغیر row نیز یک آرایه میباشد که از یک رکورد یا سطر گرفته شده است؛ همانطور که میدانید، هر رکورد ستونهایی دارد که مقادیری در آنها قرار میگیرند و با توجه به SELECT که نوشتهایم، میدانیم که چه ستونهایی در حال حاظر داخل row قابل دسترسی هستند.
بستن کانکشن
اگرچه کانکشن ایجاد شده را در پایان اجرای کد نبندیم، خودش به صورت خودکار بسته میشود؛ اما بهتر است که این کار را خودمان انجام دهیم:
// $conn->close(); //
کد انتهایی
// $servername = "localhost"; $username = "username"; $password = "password"; $dbname = "myDB"; $conn = new mysqli($servername, $username, $password, $dbname); if ($conn->connect_error) { die("Connection failed: " . $conn->connect_error); } $sql = "SELECT id, firstname, lastname FROM MyGuests"; $result = $conn->query($sql); if ($result->num_rows > 0) { // output data of each row while($row = $result->fetch_assoc()) { echo "id: " . $row["id"]. " - Name: " . $row["firstname"]. " " . $row["lastname"]. "<br>"; } } else { echo "0 results"; } $conn->close(); //
نظرات ثبت شده بدون دیدگاه