ubuntu

استفاده از پسوند PDO PHP برای انجام تراکنش MySQL

یک تراکنش MySQL گروهی از دستورات SQL است که به طور منطقی مرتبط هستند و به عنوان یک یونیت واحد در بانک اطلاعاتی اجرا می شوند. تراکنش ها برای اجرای ACID (Atomicity, Consistency, Isolation, Durability ) یعنی ظرفیت ، ثبات ، انزوا و دوام در یک برنامه استفاده می شود. در واقع مجموعه ای از استانداردها است که قابلیت اطمینان عملیات پردازش را در یک پایگاه داده هدایت می کند.
در صورت بروز خطا ، Atomicity موفقیت تراکنش های مرتبط یا شکست کامل را تضمین می کند. Consistency ، اعتبار داده های ارسالی به پایگاه داده را مطابق با منطق تعریف شده کسب و کار تضمین می کند. Isolation ، اجرای صحیح تراکنش های همزمان است که تضمین میکند مشتری های مختلفی که به یک بانک اطلاعاتی متصل می شوند ، بر یکدیگر تأثیر نمی گذارند. Durability تضمین می کند که تراکنش ها مرتبط از لحاظ منطقی به طور دائم در پایگاه داده باقی بمانند.
عبارات SQL صادر شده از طریق تراکنش یا باید موفقیت آمیز باشد یا در کل با شکست پایان یابد. در صورت عدم موفقیت هر یک از جستارها، MySQL تغییرات را پس می زند و هرگز به پایگاه داده ارائه نمی کند.
یک مثال خوب برای درک نحوه عملکرد تراکنش ها MySQL یک وب سایت تجارت الکترونیکی است. هنگامی که مشتری سفارش می دهد ، بسته به منطق کسب و کار ، برنامه سوابق را در چندین جدول مانند: orders  و orders_products درج می کند. سوابق چند جدولی مربوط به یک سفارش واحد باید به صورت اتمی به عنوان یک یونیت منطقی واحد به بانک اطلاعاتی ارسال شود.
مورد دیگر استفاده در یک برنامه بانکی است. هنگامی که مشتری در حال انتقال پول است ، چند تراکنش به بانک اطلاعاتی ارسال می شوند. حساب فرستنده بدهکار میشود و به حساب طرف گیرنده اعتبار داده می شود. این دو تراکنش باید همزمان انجام شود. اگر یکی از آنها موفقیت آمیز نباشد ، پایگاه داده به حالت اصلی خود بازمیگردد و هیچ تغییری در دیسک ذخیره نمی شود.
در این آموزش ، شما از افزونه PDO PHP استفاده می کنید که واسطی برای کار با بانکهای داده در PHP ، جهت انجام تراکنش ها MySQL روی یک سرور مجازی Ubuntu 18.04 ، فراهم می کند.
پیش نیازها
قبل از شروع به موارد زیر نیاز خواهید داشت:
⦁ یک سرور مجازی Ubuntu 18.04 که با دنبال کردن راهنمای راه اندازی سرور مجازی اولیه با اوبونتو 18.04 نصب شده باشد و شامل یک کاربر غیر ریشه سودو باشد.
⦁ Apache ، MySQL و PHP که روی سیستم شما نصب شده باشند. شما می توانید راهنمای نحوه نصب پشته Linux ، Apache ، MySQL ، PHP (LAMP) روی Ubuntu 18.04 را دنبال کنید. می توانید مرحله 4 (تنظیم میزبان های مجازی) را جست و جو کنید و مستقیماً با تنظیمات پیش فرض آپاچی کار کنید.
مرحله 1 – ایجاد یک بانک اطلاعاتی و جداول نمونه
ابتدا یک بانک اطلاعاتی نمونه ایجاد می کنید و قبل از شروع کار با تراکنش های MySQL ، چند جدول اضافه کنید. ابتدا به عنوان root به سرور مجازی MySQL خود وارد شوید:
⦁ $ sudo mysql -u root -p

در صورت درخواست ، رمزعبور ریشه MySQL خود را وارد کرده و ENTER را بزنید تا ادامه یابد. سپس ، یک بانک اطلاعاتی ایجاد کنید ، برای اهداف این آموزش ما با پایگاه داده sample_store را فراخوانی کنیم:
⦁ Mysql> CREATE DATABASE sample_store;

خروجی زیر را مشاهده خواهید کرد:
Output
Query OK, 1 row affected (0.00 sec)

یک کاربر به نام sample_user برای پایگاه داده خود ایجاد کنید. به یاد داشته باشید که PASSWORD را با یک مقدار قوی جایگزین کنید:
⦁ Mysql> CREATE USER ‘sample_user’@’localhost’ IDENTIFIED BY ‘PASSWORD’;

امتیازات کاملی را برای کاربر خود به پایگاه داده sample_store صادر کنید:
⦁ Mysql> GRANT ALL PRIVILEGES ON sample_store.* TO ‘sample_user’@’localhost’;

در آخر ، امتیازات MySQL را مجدد لود کنید:
⦁ Mysql> FLUSH PRIVILEGES;

وقتی کاربر خود را ایجاد کردید ، خروجی زیر را مشاهده خواهید کرد:
Output
Query OK, 0 rows affected (0.01 sec)
. . .

با قرارگیری پایگاه داده و کاربر در جای خود ، می توانید چندین جدول برای نشان دادن نحوه عملکرد تراکنش ها MySQL ایجاد کنید.
از سرور مجازی MySQL خارج شوید:
⦁ Mysql> QUIT;

پس از خروج از سیستم ، خروجی زیر را مشاهده خواهید کرد:
Output
Bye.

سپس با اعتبار sample_user که تازه ایجاد کرده اید وارد شوید:
⦁ $ sudo mysql -u sample_user -p

کلمه عبور را برای sample_user وارد کنید و برای ادامه ، ENTER را بزنید.
برای تبدیل شدن آن به پایگاه داده فعلی انتخاب شده ، به sample_store سوییچ کنید:
⦁ Mysql> USE sample_store;

پس از انتخاب خروجی زیر را مشاهده خواهید کرد:
Output
Database Changed.

بعد ، یک جدول products  ایجاد کنید:
⦁ Mysql> CREATE TABLE products (product_id BIGINT PRIMARY KEY AUTO_INCREMENT, product_name VARCHAR(50), price DOUBLE) ENGINE = InnoDB;

این دستور یک جدول products با فیلدی به نام product_id ایجاد می کند. شما از یک نوع داده BIGINT استفاده می کنید که می تواند مقدار زیادی تا 2^63-1 را در خود جای دهد. برای شناسایی منحصر به فرد محصولات از این فیلد به عنوان کلید اصلی استفاده می کنید. کلمه کلیدی AUTO_INCREMENT به MySQL دستور می دهد تا با وارد کردن محصولات جدید ، عددی بعدی ایجاد شود.
قسمت product_name از نوع VARCHAR است که می تواند حداکثر 50 حرف یا عدد را در خود نگه دارد. برای قیمت محصول ، از یک نوع داده DOUBLE برای تهیه قالب های نقطه شناور در قیمت ها با عدد اعشاری استفاده می کنید.
سرانجام ، از InnoDB به عنوان ENGINE استفاده می کنید زیرا برخلاف سایر موتورهای ذخیره سازی مانند MyISAM ، به راحتی از تراکنش های MySQL پشتیبانی می کند.
هنگامی که جدول محصولات خود را ایجاد کردید ، خروجی زیر را دریافت خواهید کرد:
Output
Query OK, 0 rows affected (0.02 sec)

در مرحله بعد با اجرای دستورات زیر برخی موارد را به جدول محصولات اضافه کنید:
⦁ Mysql> INSERT INTO products(product_name, price) VALUES (‘WINTER COAT’,’25.50′);

⦁ Mysql> INSERT INTO products(product_name, price) VALUES (‘EMBROIDERED SHIRT’,’13.90′);

⦁ Mysql> INSERT INTO products(product_name, price) VALUES (‘FASHION SHOES’,’45.30′);

⦁ Mysql> INSERT INTO products(product_name, price) VALUES (‘PROXIMA TROUSER’,’39.95′);

بعد از هر عمل INSERT ، خروجی مشابه زیر را مشاهده خواهید کرد:
Output
Query OK, 1 row affected (0.02 sec)
. . .

سپس بررسی کنید که داده ها به جدول محصولات اضافه شده باشند:
⦁ Mysql> SELECT * FROM products;

لیستی از چهار کالایی را که درج کرده اید خواهید دید:
Output
+————+——————-+——-+
| product_id | product_name | price |
+————+——————-+——-+
| 1 | WINTER COAT | 25.5 |
| 2 | EMBROIDERED SHIRT | 13.9 |
| 3 | FASHION SHOES | 45.3 |
| 4 | PROXIMA TROUSER | 39.95 |
+————+——————-+——-+
4 rows in set (0.01 sec)

در مرحله بعدی ، شما یک جدول customers برای نگهداری اطلاعات اولیه درباره مشتریان ایجاد خواهید کرد:
⦁ Mysql> CREATE TABLE customers (customer_id BIGINT PRIMARY KEY AUTO_INCREMENT, customer_name VARCHAR(50) ) ENGINE = InnoDB;

همانطور که در جدول محصولات وجود دارد ، از نوع داده BIGINT برای customer_idاستفاده می کنید و این تضمین می کند که جدول می تواند تعداد زیادی مشتری تا 2^63-1 را پشتیبانی کند. کلمه کلیدی AUTO_INCREMENT پس از وارد کردن مشتری جدید ، مقدار ستون ها را افزایش می دهد.
از آنجا که ستون customer_name الفبا را می پذیرد، از نوع داده VARCHAR با محدودیت 50 کاراکتر استفاده می کنید. باز هم ، برای پشتیبانی از تراکنش ها از ENGINE ذخیره سازی InnoDB استفاده می کنید.
پس از اجرای دستور قبلی برای ایجاد جدول مشتری ، خروجی زیر را مشاهده خواهید کرد:
Output
Query OK, 0 rows affected (0.02 sec)

شما سه مشتری نمونه به جدول اضافه خواهید کرد. دستورات زیر را اجرا کنید:
⦁ Mysql> INSERT INTO customers(customer_name) VALUES (‘JOHN DOE’);

⦁ Mysql> INSERT INTO customers(customer_name) VALUES (‘ROE MARY’);

⦁ Mysql> INSERT INTO customers(customer_name) VALUES (‘DOE JANE’);
پس از افزودن مشتریان ، خروجی مشابه با زیر را مشاهده خواهید کرد:
Output
Query OK, 1 row affected (0.02 sec)
. . .

سپس داده ها را در جدول مشتریان بررسی کنید:
⦁ Mysql> SELECT * FROM customers;

لیستی از سه مشتری را مشاهده خواهید کرد:
Output
+————-+—————+
| customer_id | customer_name |
+————-+—————+
| 1 | JOHN DOE |
| 2 | ROE MARY |
| 3 | DOE JANE |
+————-+—————+
3 rows in set (0.00 sec)

در مرحله بعد ، می توانید برای ثبت سفارشات توسط مشتریان مختلف ، جدول سفارشات ایجاد کنید. برای ایجاد جدول سفارشات ، دستور زیر را اجرا کنید:
⦁ Mysql> CREATE TABLE orders (order_id BIGINT AUTO_INCREMENT PRIMARY KEY, order_date DATETIME, customer_id BIGINT, order_total DOUBLE) ENGINE = InnoDB;

از ستون order_id بعنوان کلید اصلی استفاده می کنید. نوع داده های BIGINT به شما امکان می دهد تا حداکثر 2 ^ 63-1 سفارش را در خود جای دهید و پس از هر درج سفارش ، خودکار افزایش می یابد. قسمت rend_date تاریخ و زمان واقعی سفارش را نگه می دارد و از این رو ، از نوع داده DATETIME استفاده می کنید. customer_id به جدول مشتریانی که قبلاً ایجاد کرده اید مربوط می شود.
خروجی زیر را مشاهده خواهید کرد:
Output
Query OK, 0 rows affected (0.02 sec)

از آنجا که سفارش یک مشتری ممکن است شامل چندین مورد باشد ، برای نگه داشتن این اطلاعات باید یک جدول orders_productsرا ایجاد کنید.
برای ایجاد جدول order_products ، دستور زیر را اجرا کنید:
⦁ Mysql> CREATE TABLE orders_products (ref_id BIGINT PRIMARY KEY AUTO_INCREMENT, order_id BIGINT, product_id BIGINT, price DOUBLE, quantity BIGINT) ENGINE = InnoDB;

شما از ref_id بعنوان کلید اصلی استفاده می کنید و پس از هر درج رکورد به طور خودکار افزایش می یابد. order_id و product_id به ترتیب مربوط به جداول سفارشات و محصولات هستند. ستون قیمت از نوع داده DOUBLE به منظور جایگذاری مقادیر شناور است.
موتور ذخیره سازی InnoDB باید با جداول دیگری که قبلاً ایجاد شده است مطابقت داشته باشد زیرا سفارش یک مشتری واحد روی چندین جدول بطور همزمان با استفاده از تراکنش ها تأثیر می گذارد.
خروجی شما ایجاد جدول را تأیید می کند:
Output
Query OK, 0 rows affected (0.02 sec)

اکنون نمی توانید هیچ داده ای را به جداول سفارشات و orders_products اضافه کنید اما بعداً با استفاده از یک اسکریپت PHP که تراکنش ها MySQL را انجام می دهد ، این کار را انجام می دهید.
از سرور مجازی MySQL خارج شوید:
⦁ Mysql> QUIT;

شمای پایگاه داده شما اکنون کامل است و آن را با برخی از فایل ها جمع کرده اید. اکنون یک کلاس PHP برای مدیریت اتصالات پایگاه داده و تراکنش ها MySQL ایجاد خواهید کرد.
مرحله 2 – طراحی کلاس PHP برای انجام تراکنش های MySQL
در این مرحله ، شما یک کلاس PHP ایجاد می کنید که از PDO (PHP Data Objects) برای انجام تراکنش های MySQL استفاده می کند. این کلاس به پایگاه داده MySQL شما متصل می شود و داده ها را بصورت اتمی به پایگاه داده وارد می کند.
فایل کلاس را در دیرکتوری اصلی سرور مجازی وب Apache خود ذخیره کنید. برای این کار ، یک فایل DBTransaction.php را با استفاده از ویرایشگر متن خود ایجاد کنید:
⦁ $ sudo nano /var/www/html/DBTransaction.php

سپس کد زیر را به فایل اضافه کنید. PASSWORD را با مقدار ایجاد شده در مرحله 1 جایگزین کنید:
/var/www/html/DBTransaction.php
<?php

class DBTransaction
{
protected $pdo;
public $last_insert_id;

public function __construct()
{
define(‘DB_NAME’, ‘sample_store’);
define(‘DB_USER’, ‘sample_user’);
define(‘DB_PASSWORD’, ‘PASSWORD’);
define(‘DB_HOST’, ‘localhost’);

$this->pdo = new PDO(“mysql:host=” . DB_HOST . “;dbname=” . DB_NAME, DB_USER, DB_PASSWORD);
$this->pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$this->pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
}

با شروع کلاس DBTransaction ، PDO از ثابت ها (DB_HOST ، DB_NAME ، DB_USER و DB_PASSWORD) برای مقداردهی اولیه و اتصال به دیتابیس که در مرحله 1 ایجاد کرده اید استفاده می کند.
توجه: از آنجا که ما تراکنش های MySQL را در یک مقیاس کوچک در اینجا نشان می دهیم ، متغیرهای پایگاه داده را در کلاس DBTransaction اعلام کردیم. در یک پروژه تولیدی بزرگ ، معمولاً یک فایل پیکربندی جداگانه ایجاد می کنید و ثابت های پایگاه داده را از آن فایل با استفاده از یک عبارت PHP need_once لود می کنید.

در مرحله بعد ، برای کلاس PDO دو ویژگی تعیین می کنید:
⦁ ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION این ویژگی به PDO دستور می دهد اگر خطایی رخ دهد ، استثنائی را ارائه کند. چنین خطاهایی را می توان برای اشکال زدایی ثبت کرد.
⦁ ATTR_EMULATE_PREPARES, false این گزینه تقلید جملات آماده را غیرفعال می کند و به موتور پایگاه داده MySQL اجازه می دهد تا خود بیانیه ها را آماده کند.
اکنون کد زیر را به فایل خود اضافه کنید تا روش هایی برای کلاس شما ایجاد شود:
/var/www/html/DBTransaction.php
. . .
public function startTransaction()
{
$this->pdo->beginTransaction();
}

public function insertTransaction($sql, $data)
{
$stmt = $this->pdo->prepare($sql);
$stmt->execute($data);
$this->last_insert_id = $this->pdo->lastInsertId();
}

public function submitTransaction()
{
try {
$this->pdo->commit();
} catch(PDOException $e) {
$this->pdo->rollBack();
return false;
}

return true;
}
}

با فشار دادن CTRL + X ، Y ، سپس enter فایل را ذخیره کرده و ببندید.
برای کار با تراکنش های MySQL ، شما سه روش اصلی را در کلاس DBTransaction ایجاد می کنید. startTransaction ، insertTransaction و submitTransaction.
⦁ startTransaction: این روش به PDO دستور می دهد تا تراکنش را شروع کند و تا زمان صدور فرمان ارائه ، ارائه خودکار را خاموش کند.
⦁ insertTransaction: این روش دو آرگومان را می گیرد. متغیر sql $ بیانیه SQL را اجرا می کند در حالی که متغیر data $ مجموعه ای از داده هایی است که باید به عبارت SQL متصل شود چرا که شما زا عبارات آماده استفاده میکنید. داده ها به عنوان آرایه ای به روش insertTransaction منتقل می شوند.
⦁ submitTransaction : این روش با صدور فرمان commit() تغییراتی را به صورت دائم در پایگاه داده ایجاد میکند.با این حال، اگر خطایی رخ داده و تراکنش ها مشکلی داشته باشند ، در صورت مطرح شدن استثناء PDO ، روش RollBack () را برای بازگردانی پایگاه داده به حالت اولیه خود فراخوانی می کند.
کلاس DBTransaction شما یک تراکنش را آغاز می کند ، دستورات مختلف SQL را برای اجرا آماده می کند و در صورت عدم وجود مشکل ، تغییرات دیتابیس را به صورت اتمی ارائه می دهد. علاوه بر این ، کلاس به شما امکان می دهد تا با دسترسی به مشخصه های عمومی last_insert_id ، رکورد rend_id را که اخیراً ایجاد کرده اید ، بازیابی کنید.
کلاس DBTransaction اکنون آماده است که با استفاده از هر کد PHP ، که در مرحله بعدی ایجاد خواهید کرد ، فراخوانی و استفاده شود.
مرحله 3 – ایجاد یک اسکریپت PHP برای استفاده از کلاس DBTransaction
شما یک اسکریپت PHP ایجاد خواهید کرد کلاس DBTransaction را پیاده سازی می کند و گروهی از دستورات SQL را به پایگاه داده MySQL ارسال می کند. گردش کار سفارش مشتری را در سبد خرید آنلاین دنبال می کنید.
این جستارهایSQL بر سفارشات و جداول سفارشات تأثیر می گذارد. کلاس DBTransaction شما فقط باید در صورتی اجازه تغییرات در پایگاه داده را بدهد که تمام نمایش داده ها بدون هیچ خطایی انجام شوند. در غیر این صورت ، خطایی دریافت خواهید کرد و هرگونه تغییر دوباره برگردانده میشود.
شما در حال ایجاد سفارش واحد برای مشتری JOHN DOE با شناسه مشتری برابر 1 هستید. سفارش مشتری دارای سه کالای مختلف با مقادیر متفاوت از جدول محصولات است. اسکریپت PHP شما اطلاعات سفارش مشتری را می گیرد و آن را وارد کلاس DBTransaction می کند.
فایل Order.php را ایجاد کنید:
⦁ $ sudo nano /var/www/html/orders.php

سپس کد زیر را به فایل اضافه کنید:
/var/www/html/orders.php
<?php

require(“DBTransaction.php”);

$db_host = “database_host”;
$db_name = “database_name”;
$db_user = “database_user”;
$db_password = “PASSWORD”;

$customer_id = 2;

$products[] = [
‘product_id’ => 1,
‘price’ => 25.50,
‘quantity’ => 1
];

$products[] = [
‘product_id’ => 2,
‘price’ => 13.90,
‘quantity’ => 3
];

$products[] = [
‘product_id’ => 3,
‘price’ => 45.30,
‘quantity’ => 2
];

$transaction = new DBTransaction($db_host, $db_user, $db_password, $db_name);

یک اسکریپت PHP ایجاد کرده اید که نمونه ای از کلاس DBTransaction را که در مرحله 2 ایجاد کردید ، مقداردهی اولیه می کند.
در این اسکریپت ، فایل DBTransaction.php را درج می کنید و کلاس DBTransaction را راه اندازی می نمایید. در مرحله بعد ، آرایه ای چند بعدی از کلیه کالاهایی را که مشتری از فروشگاه سفارش می دهد ، تهیه می کنید. همچنین برای شروع یک تراکنش از روش startTransaction () استفاده می کنید.
کد بعدی را اضافه کنید تا اسکریپت orders.php خود را به پایان برسانید:
/var/www/html/orders.php
. . .
$order_query = “insert into orders (order_id, customer_id, order_date, order_total) values(:order_id, :customer_id, :order_date, :order_total)”;
$product_query = “insert into orders_products (order_id, product_id, price, quantity) values(:order_id, :product_id, :price, :quantity)”;

$transaction->insertQuery($order_query, [
‘customer_id’ => $customer_id,
‘order_date’ => “2020-01-11”,
‘order_total’ => 157.8
]);

$order_id = $transaction->last_insert_id;

foreach ($products as $product) {
$transaction->insertQuery($product_query, [
‘order_id’ => $order_id,
‘product_id’ => $product[‘product_id’],
‘price’ => $product[‘price’],
‘quantity’ => $product[‘quantity’]
]);
}

$result = $transaction->submit();

if ($result) {
echo “Records successfully submitted”;
} else {
echo “There was an error.”;
}

با فشار دادن CTRL + X ، Y ، سپس enter فایل را ذخیره کرده و ببندید.
شما دستور را برای قرار دادن در جدول سفارشات از طریق روش insertTransaction آماده می کنید. پس از این ، مقدار مشخصه عمومی last_insert_id را از کلاس DBTransaction بازیابی می کنید و از آن به عنوان $ order_id استفاده می کنید.
اکنون که $order_id را دارید ، از شناسه منحصر به فرد برای درج موارد سفارش مشتری در جدول order_products استفاده می کنید.
سرانجام ، در صورت عدم وجود مشكل ، روش submitTransaction  را برای ارائه كليه سفارشات مشتري به بانك اطلاعاتي فراخوانی میکنید. در غیر اینصورت ، روش submitTransaction  باعث بازگردانی تغییرات خواهد شد.
اکنون اسکریپت Order.php را در مرورگر خود اجرا کنید. موارد زیر را اجرا کنید و your-server-IP را با آدرس IP عمومی سرور مجازی خود جایگزین کنید:
http://your-server-IP/orders.php

تأیید صحت ارسال فایل با موفقیت را مشاهده خواهید کرد:

اسکریپت PHP شما مطابق آنچه انتظار می رود کار می کند و سفارش به همراه محصولات سفارش مرتبط با آن به صورت اتمی به بانک اطلاعاتی ارسال می شود.
شما فایل orders.php را در یک پنجره مرورگر اجرا کرده اید. اسکریپت کلاس DBTransaction را به کار گرفته و به نوبه خود جزئیات سفارشات را به پایگاه داده ارسال می کند. در مرحله بعد ، تأیید می کنید که سوابق در جداول بانک اطلاعاتی مرتبط ذخیره شده است.
مرحله 4 – تأیید ورودی ها به بانک اطلاعاتی شما
در این مرحله ، بررسی خواهید کرد که آیا تراکنشی که از پنجره مرورگر برای سفارش مشتری انجام شده است مطابق پیش بینی در جداول بانک اطلاعاتی ارسال شده است.
برای این کار ، دوباره وارد پایگاه داده MySQL شوید:
⦁ $ sudo mysql -u sample_user -p

برای ادامه رمز عبور sample_user را وارد کرده و ENTER را بزنید.
به پایگاه داده sample_storeسوییچ کنید:
⦁ Mysql> USE sample_store;

قبل از ادامه با تأیید خروجی زیر ، اطمینان حاصل کنید که بانک اطلاعات تغییر کرده است:
Output
Database Changed.

سپس دستور زیر را برای بازیابی سوابق از جدول سفارشات صادر کنید:
⦁ Mysql> SELECT * FROM orders;

با این کار خروجی زیر با جزئیات سفارش مشتری نمایش داده می شود:
Output
+———-+———————+————-+————-+
| order_id | order_date | customer_id | order_total |
+———-+———————+————-+————-+
| 1 | 2020-01-11 00:00:00 | 2 | 157.8 |
+———-+———————+————-+————-+
1 row in set (0.00 sec)

در مرحله بعد ، سوابق را از جدول order_products بازیابی کنید:
⦁ Mysql> SELECT * FROM orders_products;

با لیستی از محصولات موجود در سفارش مشتری ، خروجی مشابه زیر را مشاهده خواهید کرد:
Output
+——–+———-+————+——-+———-+
| ref_id | order_id | product_id | price | quantity |
+——–+———-+————+——-+———-+
| 1 | 1 | 1 | 25.5 | 1 |
| 2 | 1 | 2 | 13.9 | 3 |
| 3 | 1 | 3 | 45.3 | 2 |
+——–+———-+————+——-+———-+
3 rows in set (0.00 sec)

خروجی تأیید می کند که تراکنش در بانک اطلاعاتی ذخیره شده است و کلاس DBTransaction کمکی کلاس شما همانطور که انتظار می رود کار می کند.
نتیجه
در این راهنما از PHP PDO برای کار با تراکنش های MySQL استفاده کرده اید. اگرچه این مقاله قطعی در مورد طراحی یک نرم افزار تجارت الکترونیکی نیست ، اما نمونه ای برای استفاده از تراکنش های MySQL در برنامه های شما آورده است.
برای کسب اطلاعات بیشتر در مورد مدل MySQL ACID ، به راهنمای InnoDB و راهنمای مدل ACID از وب سایت رسمی MySQL مراجعه کنید. برای اطلاعات بیشتر در رابطه با آموزش ها ، مقاله ها و پرسش و پاسخ به صفحه محتوای MySQL ما مراجعه کنید.

 

 

از این لینک ها زیر می توانید آمورش های بیشتری برای لینوکس پیدا کنید :

استفاده از nsh برای دستورات از راه دور اوبونتو 18 –  میزبانی وب سایت با Caddy اوبونتو 18

تنظیم سرور ذخیره سازی آبجکت با استفاده از Minio در اوبونتو 18  –  ضبط و اشتراک گذاری ترمینال با Terminalizer اوبونتو

تنظیم مسیریابی شرطی و پاسخگو با React Router v4  –  ایجاد یک URL کوتاه کننده با Django و GraphQL

یک برنامه ردیابی سلامت را با React ،GraphQL و Okta –  ساخت برنامه چت زمان حقیقی React و GraphQL

به روزرسانی فیلترهای مرتب سازی Angular (زاویه ای) –  با استفاده از React ، Superagent و API اینستاگرام

نحوه ساختن یک برنامه جهانی با Nuxt.js و Django –  دکمه دانلود با ریزتعاملات با CSS ، anime.js و segment.js

نحوه اضافه کردن عکسهای پیشرفته در Node و Express  –  با Vue ،GraphQL و Apollo Client یک وبلاگ ساخت

یک برنامه SSR با روتر Preact ، Unistore و Preact بسازید  –  ساخت برنامه های وب پیشرونده با Angular

اشکال زدایی JavaScript در تولید با نقشه های منبع  –  می توان با Koa برنامه “سلام جهانی” ساخت

ساختن یک برنامه با Node ، React ، Okta  –   مدیریت حالت فرم در React با Redux Form

نحوه تنظیم Laravel ، Nginx و MySQL  –  ارتقاء از AngularJS به Angular با ngUpgrade

استفاده از ویژوال استودیو از راه دور  –  احراز هویت API با JSON Web Tokens و Passport

راه اندازی یک پروژه React با Parcel  –  ایجاد Swiper مانند Netflix را در Vue

ساختن یک ربات تلگرام با Laravel و BotMan  –  استفاده از map، filter، و reduce در جاوااسکریپت

چگونه می توان موتور جستجوی زمان واقعی را با Vue  –  ساختن سیستم مستندات (Documentation) با Vue و VuePress

استفاده از اشتراک زنده با کد ویژوال استودیو  –  ساخت یک مقیاس اندازه گیری قدرت رمز عبور را در React

شروع عملی GraphQL با Node.js و Express  –  ساخت یک برنامه آب و هوا در Django

نحوه نصب Discourse روی Ubuntu 18  –  تأیید رمز عبور با استفاده از درخواست فرم Laravel

نحوه نصب MySQL در CentOS 8  –  استفاده از پسوند PDO PHP برای انجام تراکنش MySQL

نصب و پیکربندی SNMP Daemon و Client در Ubuntu 18  –  نصب Linux، Nginx، MariaDB،PHP در Debian 10

 

 

کلمات کلیدی خرید سرور

خرید vps – خرید سرور مجازی – خرید سرور – سرور هلند – فروش vps – سرور مجازی آمریکا – خریدvps – سرور مجازی هلند – فروش سرور مجازی – سرور آمریکا – vps – سرور مجازی انگلیس – سرور مجازی آلمان – سرور مجازی کانادا – خرید vps آمریکا – خرید وی پی اس – سرور – خرید سرور مجازی هلند – vps خرید – سرور مجازی فرانسه – سرور مجازی هلند – خرید vps آمریکاخرید سرور مجازی ارزان هلندvpsخرید vps هلندخرید سرور مجازی آمریکاخرید vps فرانسهتست vpsسرور مجازی تستسرور مجازی ویندوزارزانترین vpsخرید وی پی اسvps ارزان – 


https://vpsgol.net/product/vps-germany/

https://vpsgol.net/product/vps-usa/

https://vpsgol.net/product/vps-france/

https://vpsgol.net/product/vps-canada/

https://vpsgol.net/product/vps-poland/

https://vpsgol.net/product/vps-netherlands/

https://vpsgol.net/product/vps-england/