چگونه از MySql استفاده کنیم
برای اتصال به mySql در کامند لاین ابتدا به آدرس C:\xampp\mysql\bin میرویم سپس دستور mysql.exe -u root را مینویسیم، من برای mysql خود پسوردی قرار ندادهام .
برای دیدن دیتابیسهایی که دارید میتوانید از دستور SHOW DATABASES; استفاده کنید، برای ساخت یک دیتابیس جدید از دستور CREATE DATABASE db_name; استفاده میشود.
شروع میکنیم بیاید ببینیم چه دیتابیسهایی داریم .
همان طور که در تصویر میبینید از دستور SHOW DATABASES; استفاده کردم.
حالا نوبت ساختن یک دیتابیس است، فرض کنید میخواهم برای دارکوب وب یک دیتابیس ایجاد کنم.
CREATE DATABSE darkoob_web;
همان طور که در تصویر بالا میبینید دیتابیس مورد نظر من ایجاد شده است و من آن را در لیست دیتابیسهای mysql خود میبینم.
برای اینکه بتوانم از دیتابیسی که ساختهام استفاده کنم، باید از دستود use darkoob_web; استفاده کنم .
ما با یوزر روت وارد mysql شدیم، این یوزر قویترین یوز در mysql است، بهتره است یک یوز دیگر ایجاد کنیم و به آن یوزر اجازه کار بر روی دیتابیس darkoob_web را بدهیم به این صورت .
GRANT ALL PRIVILEGES ON darkoob_web.* TO ‘darkoob_cms’@’localhost’ IDENTIFIED BY ‘secretpassword’;
با دستور exit; خارج شوید و این بار با یوزری که ساختیم وارد.
Mysql.exe –u darkoob_cms –p darkoob_web
حالا که فهمیدیم چگونه یک دیتابیس و یوزر ایجاد کنیم، وقت آن رسیده که جداولی ایجاد کرده و با آنها کار کنیم، برای دیدن جداول از دستور show tables; استفاده میکنیم و برای ایجاد جدول از create table table_name();
همان طور که میبینید من یک ستون به نام id دارم، که از نوع عدد صحیح است و نمیتواند مقدارش خالی باشید همچنین به صورت اتوماتک مقدارش افزایش پیدا میکند
یک ستون به نام menuName که از نوع رشته است و 30 کاراکتر میتواند داشته باشد و نمیتواند مقدارش خالی باشید.
ستونی به نام position از نوع عدد صحیح که به این ستون هم نمیتواند مقدارش خالی باشید.
ستونی به نام visible از نوع تاینی اینت این ستون نیز نمیتواند مقدارش خالی باشید.
خواندن ، نوشتن ، بروز رسانی ، حذف در MySql (CRUD):
برای خواندن اطلاعات یک جدول از دستور SELECT استفاده میکنیم، برای نوشتن از INSERT، بروز رسانی UPDATE حذف DELETE
پیشنهاد میکنم در مورد این دستورات بیشتر مطالعه کنید در این قسمت نگاهی کوتاه به این دستورات خواهیم داشت.
با هم اطلاعاتی را به جدول subjects اضافه میکنیم :
همان طور که در تصویر بالا میبیند با استفاده از دستور INSERT اطلاعاتی را به جدول subjects اضافه کردم، به یاد داشته باشید که برای نشان دادن رشته ها در MySql از علامت ‘ ‘ استفاده میکنیم .
من اطلاعات دیگری نیز اضافه میکنم .
حال بیاید اطلاعات را update (بروز رسانی یا ویرایش کنیم ).
در بین اطلاعاتی که وارد کردام id شماره 4 دارای visible 0 میباشد میخواهم مقدار آن را به 1 تغییر دهم، برای این کار.
UPDATE subjects
SET visible = 1
WHERE id = 4;
همان طور که در تصوریر بالا میبینید id شماره 4 یعنی visible از 0 به 1 تغییر کرد.
چگونه Relational database ایجاد کنیم ؟
همان طور که میبینید ستونی به نام subjecId ایجاد کردام، و سپس در INDEX قرارش دادم سپس کافی است در هنگام ورود اطلاعات، id مورد نظر از جدول subjects را در subjectId جدول pages وارد کنید .
INSERT INTO pages(subjectId,menuName,position,visible,content)
VALUES(1,’Our History’,2,1,’Found in 2015 by two enterpris enginier’);
و برای دیدن اطلاعات می توانید بنویسید
SELECT * FROM pages WHERE subjectId = 2;
چگونه با php به mySql متصل شویم ؟
به 3 روش میتوان به mySql متصل شد 1- Mysql (Orginal MySQL API ) 2-mySqli(MySQL improved API) 3- PDO (PHP Data Objects)
در این فصل از آموزش از mySQLi استفاده خواهیم کرد.
<?php $dbHost = 'localhost'; $dbUser = 'darkoob_cms'; $dbPass = 'darkoob123'; $dbName = 'darkoob_web'; $connection = mysqli_connect( $dbHost, $dbUser, $dbPass, $dbName ); if ( mysqli_connect_errno() ) { die( 'Database connection failed: ' . mysqli_connect_error() . '(' . mysqli_connect_errno() . ')' ); } ?> <!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>Data Bases</title> </head> <body> </body> </html> <?php mysqli_close($connection);
همان طور که در کد بالا میبینید از فانکشن mysqli_connect برای اتصال به mySql استفاده کردایم، این فانکشن 4 پارامتر میگیرد، هاست در اینجا local host ، یوزرنیم در اینجا darkoob_cms، پسورد darkoob123 و نام دیتابیس darkoob_we میباشد.
سپس چک میکنیم اگر خطایی در اتصال وجود دارد آن را به ما نمایش دهد.
این کد فقط شما را به دیتابیس متصل میکند. وقت آن است که دادهها را نمایش دهیم .
<?php $dbHost = 'localhost'; $dbUser = 'darkoob_cms'; $dbPass = 'darkoob123'; $dbName = 'darkoob_web'; $connection = mysqli_connect( $dbHost, $dbUser, $dbPass, $dbName ); if ( mysqli_connect_errno() ) { die( 'Database connection failed: ' . mysqli_connect_error() . '(' . mysqli_connect_errno() . ')' ); } $query = 'SELECT * FROM subjects'; $result = mysqli_query( $connection, $query ); if ( ! $result ) { die( 'Database query failed' ); } ?> <!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>Data Bases</title> </head> <body> <ul> <?php while ( $subject = mysqli_fetch_assoc( $result ) ) { ?> <li>ID is: <?php echo $subject['id'] ?></li> <li>Menu Name is: <?php echo $subject['menuName'] ?></li> <li>Position is: <?php echo $subject['position'] ?></li> <li>Visible is: <?php echo $subject['visible'] ?></li> <hr/> <?php } ?> </ul> <?php mysqli_free_result( $result ); ?> </body> </html> <?php mysqli_close( $connection );
در کد بالا ابتدا یک کویری mySql نوشتهام که تمام اطلاعات جدول subject رامیگیرد. برای اجرای این کویری از فانکشن mysqli_query استفاده میکنم که دو پارامتر میگیرد اولی connection که قبلا نوشتیم و دومی کویری که میخواهیم اجرا شود، نتیجه را در $result ریختهام، سپس چک کردام اگر مقدار result فالس باشد بگوید مشکلی پیش آمده.
اما برای نمایش اطلاعاتی که در result است یک حلقه while ساختهام و با فانکشن mysqli_fetch_assoc نتایج را داخل subject میرزم، حلقه تا زمانی اجرا میشود که result اطلاعات داشته باشد، فانکشن mysqli_fetch_assoc اطلاعات را به صورت آرایه کلید و مقدار برای ما بر میگرداند .
سپس در داخل حلقه اطلاعات را با دادن کلید هر کدام میگیریم و نمایش میدهیم، وقتی که کارمان با result تمام شد آن را با mysqli_free_result رها میکنیم و در آخر با دستور mysqli_close کانکشن را میبندیم .
به یاد داشته باشید هنگامی که اطلاعات را میخوانیم (select) میکنیم اگر این عمل موفقیت آمیز باشد دادهها به ما داده میشوند اگر ناموفق باشد false به ما داده خواهد شد، در مورد insert , update, delete یا true یا false به ما برگردانده میشود .
برای نوشتن insert میتوانیم به این شکل عمل کنیم .
<?php $dbHost = 'localhost'; $dbUser = 'darkoob_cms'; $dbPass = 'darkoob123'; $dbName = 'darkoob_web'; $connection = mysqli_connect($dbHost, $dbUser, $dbPass, $dbName); if (mysqli_connect_errno()) { die('Database connection failed: ' . mysqli_connect_error() . '(' . mysqli_connect_errno() . ')'); } $menuName = 'Edite me'; $position = 5; $visible = 1; $query = "INSERT INTO subjects (menuName,position,visible)VALUES ('{$menuName}',{$position},{$visible})"; $result = mysqli_query($connection, $query); if ($result) { echo 'Insert Success'; } else { die('Database query failed' . mysqli_error($connection)); } ?> <!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>Data Bases Insert</title> </head> <body> </body> </html> <?php mysqli_close($connection);
دقیقا شبیه select فقط کویری که نوشتیم فرق دارد و همین طور چک کردیم اگرresult مقدار true را برگرداند بگوید: “اضافه کردن با موفقیت انجام شد” در غیر این صورت بگوید: “کویری مشکل خورد” و خطا را به ما نمایش دهد . برای اطمینان از اینکه اطلاعات اضافه شده یا نه میتوانید به صفحه databases.php که با هم نوشتیم مراجعه کنید تا یک بار دیگر برای شما select بگیرد.
نوشتن update :
<?php $dbHost = 'localhost'; $dbUser = 'darkoob_cms'; $dbPass = 'darkoob123'; $dbName = 'darkoob_web'; $connection = mysqli_connect($dbHost, $dbUser, $dbPass, $dbName); if (mysqli_connect_errno()) { die('Database connection failed: ' . mysqli_connect_error() . '(' . mysqli_connect_errno() . ')'); } $menuName = 'Iam Update ...'; $position = 5; $visible = 1; $id = 5; $query = "UPDATE subjects SET menuName = '{$menuName}', position={$position}, visible ={$visible} WHERE id ={$id}"; $result = mysqli_query($connection, $query); if ($result && mysqli_affected_rows($connection) == 1) { echo 'Update Success'; } else { die('Database query failed' . mysqli_error($connection)); } ?> <!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>Data Bases Insert</title> </head> <body> </body> </html> <?php mysqli_close($connection);
نوشتن update، شبیه insert است با این تفاوت که هنگام چک کردن چک میکنیم چند سطر تغییر کرده است. چرا؟
id خود را به 5000 تغییر دهد کد را اجرا کنید میبینید که میگوید: “موفق شدیم” اما ما id 5000 نداریم .
Mysql پیغام درستی به شما نشان میدهد چون ما درست اجرا شدن کویری را چک میکنیم و کویری ما درست است اما چک نکردهایم سطری تغییر کرده یا نه برای این کار به جای روش قبلی چک کردن از این روش استفاده میکنیم و از فانکشن mysqli_affected_rows کمک میگیریم. در اینجا فقط یک سطر تغییر میکند، پس میگوییم اگر برابر یک بود، اما اگر تعداد بیشتری سطر قرار بود تغییر کند می توانیم بگویم بزرگتر از 0 .
نوشتن delete :
<?php $dbHost = 'localhost'; $dbUser = 'darkoob_cms'; $dbPass = 'darkoob123'; $dbName = 'darkoob_web'; $connection = mysqli_connect($dbHost, $dbUser, $dbPass, $dbName); if (mysqli_connect_errno()) { die('Database connection failed: ' . mysqli_connect_error() . '(' . mysqli_connect_errno() . ')'); } $id = 5; $query = "DELETE FROM subjects WHERE id={$id} LIMIT 1"; $result = mysqli_query($connection, $query); if ($result && mysqli_affected_rows($connection) == 1) { echo 'Delete Success'; } else { die('Database query failed' . mysqli_error($connection)); } ?> <!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>Data Bases Insert</title> </head> <body> </body> </html> <?php mysqli_close($connection);
نوشتن delete، همانند کدهای قبل است با این تفاوت که فقط id را لازم داریم .
در مواقعی ممکن است در رشته از ‘ استفاده کرده باشیم، برای اینکه در کویری خود دچار مشکل نشویم ابتدا رشته را داخل فانکشن mysqli_real_escape_string قرار دهید و بعد از آن استفاده کنید .
<?php $dbHost = 'localhost'; $dbUser = 'darkoob_cms'; $dbPass = 'darkoob123'; $dbName = 'darkoob_web'; $connection = mysqli_connect($dbHost, $dbUser, $dbPass, $dbName); if (mysqli_connect_errno()) { die('Database connection failed: ' . mysqli_connect_error() . '(' . mysqli_connect_errno() . ')'); } $menuName = "darkoob's web"; $position = 6; $visible = 1; $menuName = mysqli_real_escape_string($connection,$menuName); $query = "INSERT INTO subjects (menuName,position,visible)VALUES ('{$menuName}',{$position},{$visible})"; $result = mysqli_query($connection, $query); if ($result) { echo 'Insert Success'; } else { die('Database query failed' . mysqli_error($connection)); } ?> <!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>Data Bases Insert</title> </head> <body> </body> </html> <?php mysqli_close($connection);
[/av_textblock]