PHP و پایگاه داده: دستورات DELETE و UPDATE و LIMIT

15 مرداد 1398
درسنامه درس 25 از سری آموزش PHP 7
PHP و پایگاه داده: دستورات DELETE و UPDATE و LIMIT

حذف داده ها از پایگاه داده در PHP

اگر بخواهیم اطلاعات خاصی را از پایگاه داده در PHP حذف کنیم می توانیم از دستور DELETE استفاده کنیم:

DELETE FROM table_name
WHERE some_column = some_value

هشدار: به WHERE در دستور DELETE توجه ویژه داشته باشید. WHERE مشخص می کند که چه ردیف هایی باید حذف شوند و اگر آن را فراموش کنید تمامی ردیف های پایگاه داده ی خود را حذف خواهید کرد.

نگاهی به جدول MyGuests بیندازید:

reg_date email 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 email 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

به روز رسانی داده ها در پایگاه داده در PHP

برخی اوقات نیاز به ویرایش برخی از اطلاعات داریم (مثلا زمانی که کاربر حساب کاربری اش را شارژ می کند یا زمانی که تعداد لایک های یک پست افزایش پیدا می کند و ...). در این حالت می توانیم از دستور UPDATE استفاده کنیم:

UPDATE table_name
SET column1=value, column2=value2,...
WHERE some_column=some_value

هشدار: به WHERE در دستور UPDATE توجه ویژه داشته باشید. WHERE مشخص می کند که چه ردیف هایی باید ویرایش شوند و اگر آن را فراموش کنید تمامی ردیف های پایگاه داده ی خود را ویرایش خواهید کرد.

در حال حاضر جدول MyGuests بدین شکل است:

reg_date email 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 email 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

محدود کردن داده های برگشتی با LIMIT

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";

این دستور حالت خلاصه شده ی دستور بالاتر است.

تمام فصل‌های سری ترتیبی که روکسو برای مطالعه‌ی دروس سری آموزش PHP 7 توصیه می‌کند:
نویسنده شوید

دیدگاه‌های شما

در این قسمت، به پرسش‌های تخصصی شما درباره‌ی محتوای مقاله پاسخ داده نمی‌شود. سوالات خود را اینجا بپرسید.