اگر بخواهیم اطلاعات خاصی را از پایگاه داده در PHP حذف کنیم می توانیم از دستور DELETE استفاده کنیم:
DELETE FROM table_name WHERE some_column = some_value
هشدار: به WHERE در دستور DELETE توجه ویژه داشته باشید. WHERE مشخص می کند که چه ردیف هایی باید حذف شوند و اگر آن را فراموش کنید تمامی ردیف های پایگاه داده ی خود را حذف خواهید کرد.
نگاهی به جدول MyGuests بیندازید:
reg_date | lastname | firstname | id | |
2014-10-22 14:26:15 | john@example.com | Doe | John | 1 |
2014-10-23 10:22:30 | mary@example.com | Moe | Mary | 2 |
2014-10-26 10:48:23 | julie@example.com | Dooley | Julie | 3 |
مثال زیر ردیفی که دارای id=3 باشد را از این جدول حذف می کند:
به روش شیء گرا در MySQLi
<?php $servername = "localhost"; $username = "username"; $password = "password"; $dbname = "myDB"; // Create connection $conn = new mysqli($servername, $username, $password, $dbname); // Check connection if ($conn->connect_error) { die("Connection failed: " . $conn->connect_error); } // sql to delete a record $sql = "DELETE FROM MyGuests WHERE id=3"; if ($conn->query($sql) === TRUE) { echo "Record deleted successfully"; } else { echo "Error deleting record: " . $conn->error; } $conn->close(); ?>
به روش رویه ای در MySQLi
<?php $servername = "localhost"; $username = "username"; $password = "password"; $dbname = "myDB"; // Create connection $conn = mysqli_connect($servername, $username, $password, $dbname); // Check connection if (!$conn) { die("Connection failed: " . mysqli_connect_error()); } // sql to delete a record $sql = "DELETE FROM MyGuests WHERE id=3"; if (mysqli_query($conn, $sql)) { echo "Record deleted successfully"; } else { echo "Error deleting record: " . mysqli_error($conn); } mysqli_close($conn); ?>
به روش PDO
<?php $servername = "localhost"; $username = "username"; $password = "password"; $dbname = "myDBPDO"; try { $conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password); // set the PDO error mode to exception $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); // sql to delete a record $sql = "DELETE FROM MyGuests WHERE id=3"; // use exec() because no results are returned $conn->exec($sql); echo "Record deleted successfully"; } catch(PDOException $e) { echo $sql . "<br>" . $e->getMessage(); } $conn = null; ?>
بعد از اجرای یکی از این دستورات جدول ما به شکل زیر در می آید:
reg_date | lastname | firstname | id | |
2014-10-22 14:26:15 | john@example.com | Doe | John | 1 |
2014-10-23 10:22:30 | mary@example.com | Moe | Mary | 2 |
برخی اوقات نیاز به ویرایش برخی از اطلاعات داریم (مثلا زمانی که کاربر حساب کاربری اش را شارژ می کند یا زمانی که تعداد لایک های یک پست افزایش پیدا می کند و ...). در این حالت می توانیم از دستور UPDATE استفاده کنیم:
UPDATE table_name SET column1=value, column2=value2,... WHERE some_column=some_value
هشدار: به WHERE در دستور UPDATE توجه ویژه داشته باشید. WHERE مشخص می کند که چه ردیف هایی باید ویرایش شوند و اگر آن را فراموش کنید تمامی ردیف های پایگاه داده ی خود را ویرایش خواهید کرد.
در حال حاضر جدول MyGuests بدین شکل است:
reg_date | lastname | firstname | id | |
2014-10-22 14:26:15 | john@example.com | Doe | John | 1 |
2014-10-23 10:22:30 | mary@example.com | Moe | Mary | 2 |
کدهای زیر ردیفی که دارای id=2 است را ویرایش خواهند کرد.
به روش شیء گرای MySQLi
<?php $servername = "localhost"; $username = "username"; $password = "password"; $dbname = "myDB"; // Create connection $conn = new mysqli($servername, $username, $password, $dbname); // Check connection if ($conn->connect_error) { die("Connection failed: " . $conn->connect_error); } $sql = "UPDATE MyGuests SET lastname='Doe' WHERE id=2"; if ($conn->query($sql) === TRUE) { echo "Record updated successfully"; } else { echo "Error updating record: " . $conn->error; } $conn->close(); ?>
به روش رویه ای MySQLi
<?php $servername = "localhost"; $username = "username"; $password = "password"; $dbname = "myDB"; // Create connection $conn = mysqli_connect($servername, $username, $password, $dbname); // Check connection if (!$conn) { die("Connection failed: " . mysqli_connect_error()); } $sql = "UPDATE MyGuests SET lastname='Doe' WHERE id=2"; if (mysqli_query($conn, $sql)) { echo "Record updated successfully"; } else { echo "Error updating record: " . mysqli_error($conn); } mysqli_close($conn); ?>
به روش PDO
<?php $servername = "localhost"; $username = "username"; $password = "password"; $dbname = "myDBPDO"; try { $conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password); // set the PDO error mode to exception $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $sql = "UPDATE MyGuests SET lastname='Doe' WHERE id=2"; // Prepare statement $stmt = $conn->prepare($sql); // execute the query $stmt->execute(); // echo a message to say the UPDATE succeeded echo $stmt->rowCount() . " records UPDATED successfully"; } catch(PDOException $e) { echo $sql . "<br>" . $e->getMessage(); } $conn = null; ?>
پس از اجرای این دستورات جدول ما به این شکل در خواهد آمد (lastname تغییر کرده است):
reg_date | lastname | firstname | id | |
2014-10-22 14:26:15 | john@example.com | Doe | John | 1 |
2014-10-23 10:22:30 | mary@example.com | Doe | Mary | 2 |
MySQL دستوری به نام LIMIT دارد که به ما اجازه می دهد تعداد ردیف های برگشتی را محدود/مشخص کنیم. این دستور به درد ساخت نتایج چند صفحه ای (مانند پست ها و مقالات یک وب سایت) و کار با جدول های بسیار بزرگ می خورد چرا که برگرداندن ردیف های متعدد و بسیار بزرگ باعث کند شدن و مشکلات در زمینه ی عملکرد پایگاه داده ی شما خواهد شد.
تصور کنید می خواهیم ردیف های 1 تا 30 (به صورت inclusive: یعنی شامل خود 30 هم می شود) را از جدولی به نام Orders برگردانیم. دستور SQL چنین کاری بدین شکل است:
$sql = "SELECT * FROM Orders LIMIT 30";
زمانی که این دستور اجرا شود 30 ردیف اول را به ما خواهد داد.
حالا اگر بخواهیم ردیف های 16 تا 25 را برگردانیم چطور؟ راه حل MySQL برای این مشکل دستور OFFSET است؛ دستور SQL زیر می گوید تنها 10 ردیف را برگردان و از ردیف 16 شروع کن (که همان 15 OFFSET است):
$sql = "SELECT * FROM Orders LIMIT 10 OFFSET 15";
چرا 15؟ چون خود 10 را نیز شامل می شود.
یک روش کوتاه تر برای انجام همین کار نیز وجود دارد:
$sql = "SELECT * FROM Orders LIMIT 15, 10";
این دستور حالت خلاصه شده ی دستور بالاتر است.
در این قسمت، به پرسشهای تخصصی شما دربارهی محتوای مقاله پاسخ داده نمیشود. سوالات خود را اینجا بپرسید.