PHP & Mysql/Mariadb 連線
今天我們來討論如何用原生的PHP與Mysql/Mariadb做連線 , 直接上程式碼~
<?php
$server = "localhost"; # MySQL/MariaDB 伺服器
$dbuser = "root"; # 使用者帳號
$dbpassword = ""; # 使用者密碼
$dbname = "test"; # 資料庫名稱
# 連接 MySQL/MariaDB 資料庫
$connection = new mysqli($server, $dbuser, $dbpassword, $dbname);
# 檢查連線是否成功
if ($connection->connect_error) {
die("連線失敗:" . $connection->connect_error);
}
# MySQL/MariaDB 指令
$sqlQuery = "資料庫的程式碼打在這邊";
# 執行 MySQL/MariaDB 指令
if ($connection->query($sqlQuery) === TRUE) {
echo "成功建立資料表。";
} else {
echo "執行失敗:" . $connection->error;
}
# 關閉 MySQL/MariaDB 連線
$connection->close();
?>
一起來製作一個簡單的筆記本範例吧!
創建一個名叫 notes的資料表
<?php
$server = "localhost"; # MySQL/MariaDB 伺服器
$dbuser = "root"; # 使用者帳號
$dbpassword = ""; # 使用者密碼
$dbname = "test"; # 資料庫名稱
# 連接 MySQL/MariaDB 資料庫
$connection = new mysqli($server, $dbuser, $dbpassword, $dbname);
# 檢查連線是否成功
if ($connection->connect_error) {
die("連線失敗:" . $connection->connect_error);
}
# MySQL/MariaDB 指令
$sqlQuery = "CREATE TABLE `notes` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`title` VARCHAR(100) NOT NULL COLLATE 'utf8mb4_unicode_ci',
`content` TEXT NOT NULL COLLATE 'utf8mb4_unicode_ci',
PRIMARY KEY (`id`)
)";
# 執行 MySQL/MariaDB 指令
if ($connection->query($sqlQuery) === TRUE) {
echo "成功建立資料表。";
} else {
echo "執行失敗:" . $connection->error;
}
# 關閉 MySQL/MariaDB 連線
$connection->close();
?>
加入一些資料吧~
<?php
$server = "localhost"; # MySQL/MariaDB 伺服器
$dbuser = "root"; # 使用者帳號
$dbpassword = ""; # 使用者密碼
$dbname = "test"; # 資料庫名稱
# 連接 MySQL/MariaDB 資料庫
$connection = new mysqli($server, $dbuser, $dbpassword, $dbname);
# 檢查連線是否成功
if ($connection->connect_error) {
die("連線失敗:" . $connection->connect_error);
}
# MySQL/MariaDB 指令
$sqlQuery = "INSERT INTO notes (title,content) VALUES
('早上','打掃'),
('中午','看書'),
('晚上','打籃球');";
# 執行 MySQL/MariaDB 指令
if ($connection->query($sqlQuery) === TRUE) {
echo "成功建立資料表。";
} else {
# 執行失敗並顯示錯誤訊息
echo "執行失敗:" . $connection->error;
}
# 關閉 MySQL/MariaDB 連線
$connection->close();
?>
是不是很簡單呢 ~ 但是這樣還不是一個完整的網站 , 應該要有一個畫面讓使用者直接新增吧 , 那我們繼續來實作~
加入畫面 , 並且使用 ajax 來完成新增資料
如果還不熟悉 ajax 可以看這篇 jquery & ajax教學
這邊我們有兩個檔案 , index.php(畫面) 和 insert.php(新增進資料庫)
index.php
<!doctype html> <html lang="en"> <head> <!-- Required meta tags --> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> <!-- Bootstrap CSS --> <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.2.1/css/bootstrap.min.css" integrity="sha384-GJzZqFGwb1QTTN6wy59ffF1BuGJpLSa9DkKMp0DgiMDm4iYMj70gZWKYbI706tWS" crossorigin="anonymous"> <title>Notes</title> </head> <body> <div class="container"> <div class="row mt-5"> <div class="col"> <h1 style="text-align: center;">筆記本</h1> <!-- 以下為php從資料庫撈取資料並且輸出畫面的程式碼 --> <?php $server = "localhost"; # MySQL/MariaDB 伺服器 $dbuser = "root"; # 使用者帳號 $dbpassword = ""; # 使用者密碼 $dbname = "test"; # 資料庫名稱 $connection = new mysqli($server, $dbuser, $dbpassword, $dbname); # 檢查連線是否成功 if ($connection->connect_error) { die("連線失敗:" . $connection->connect_error); } # MySQL/MariaDB 指令 $sqlQuery = "SELECT title,content FROM notes"; # 執行 MySQL/MariaDB 指令 if ($result = $connection->query($sqlQuery)) { # 取得結果 // output data of each row while($row = $result->fetch_assoc()) { //輸出html畫面 echo "<h5 style='color: red;'>標題</h5>" . $row["title"].'<br>'. "<h5 style='color: red;'>內容</h5>" . $row["content"]."<hr>"; } # 釋放資源 $result->close(); } else { echo "執行失敗:" . $connection->error; } # 關閉 MySQL/MariaDB 連線 $connection->close(); ?> </div> </div> <div class="row mt-5"> <div class="col"> <div class="form-group"> <label for="title">標題</label> <input type="email" class="form-control" id="title" placeholder="最多100字..."> </div> <div class="form-group"> <label for="content">內容</label> <textarea class="form-control" id="content" rows="3" placeholder="請填寫內容"></textarea> </div> <button type="submit" class="btn btn-primary" id="enter">送出資料</button> </div> </div> </div> <!-- Optional JavaScript --> <!-- jQuery first, then Popper.js, then Bootstrap JS --> <script src="https://code.jquery.com/jquery-3.2.1.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.6/umd/popper.min.js" integrity="sha384-wHAiFfRlMFy6i5SRaxvfOCifBUQy1xHdJ/yoi7FRNXMRBu5WHdZYu1hA6ZOblgut" crossorigin="anonymous"></script> <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.2.1/js/bootstrap.min.js" integrity="sha384-B0UglyR+jN6CkvvICOB2joaf5I4l3gm9GU6Hc1og6Ls7i6U/mkkaduKaBhlAXv9k" crossorigin="anonymous"></script> </body> </html> <script type="text/javascript"> // 等全部的DOM元素下載完後就會觸發,觸發時間較早 // 補充 : window.onload是等整個網站都下載完成才會跑,如果有100張圖 , 要等100張圖下載完才會執行 , 適合用在廣告的載入 $(document).ready(function() { $("#enter").click(function() { //ID 為 submitExample 的按鈕被點擊時 $.ajax({ type: "POST", //傳送方式 , 常用的傳送方式有 post 和 get url: "insert.php", //傳送目的地 dataType: "json", //資料格式 , 傳送文字訊息都用json , 圖片的話用formdata data: { //傳送資料 title: $("#title").val(), //表單欄位 ID title content: $("#content").val() //表單欄位 ID content }, success: function(data) { if (data.result == 'success') { //如果後端回傳 json 是成功的話 //回傳正確資料的話 , 重新整理畫面 location.reload(); } if (data.result == 'error') { //彈跳視窗顯示錯誤訊息 alert(data.errorMsg); } }, error: function(jqXHR) { alert('發生錯誤'); } }) }) }); </script>
insert.php
<?php
$title = $_POST["title"]; //取得 nickname POST 值
$content = $_POST["content"]; //取得 gender POST 值
if (empty($title)) {
echo json_encode(array(
'result' => 'error',
'errorMsg' => '請輸入標題 !'
));
//因為資料錯誤所以強制停止程式碼
exit();
}
if (empty($content)) {
echo json_encode(array(
'result' => 'error',
'errorMsg' => '請輸入內容 !'
));
exit();
}
$server = "localhost"; # MySQL/MariaDB 伺服器
$dbuser = "root"; # 使用者帳號
$dbpassword = ""; # 使用者密碼
$dbname = "test"; # 資料庫名稱
# 連接 MySQL/MariaDB 資料庫
$connection = new mysqli($server, $dbuser, $dbpassword, $dbname);
# 檢查連線是否成功
if ($connection->connect_error) {
die("連線失敗:" . $connection->connect_error);
}
# MySQL/MariaDB 指令 , 使用 '' 來放PHP變數
$sqlQuery = "INSERT INTO notes (title,content) VALUES ('$title','$content')";
# 執行 MySQL/MariaDB 指令
if ($connection->query($sqlQuery) === TRUE) {
echo json_encode(array(
'result' => 'success'
));
} else {
# 執行失敗並顯示錯誤訊息
echo json_encode(array(
'result' => 'error',
'errorMsg' => '資料庫錯誤訊息 : '.$connection->error
));
}
# 關閉 MySQL/MariaDB 連線
$connection->close();
?>
刪除文章
1. 我們先在index.php新增刪除按鈕 , 使用者才能點按鈕來刪除文章
2. 然後再增加一個delete.php的檔案來執行刪除資料
index.php
<!doctype html> <html lang="en"> <head> <!-- Required meta tags --> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> <!-- Bootstrap CSS --> <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.2.1/css/bootstrap.min.css" integrity="sha384-GJzZqFGwb1QTTN6wy59ffF1BuGJpLSa9DkKMp0DgiMDm4iYMj70gZWKYbI706tWS" crossorigin="anonymous"> <title>Notes</title> </head> <body> <div class="container"> <div class="row mt-5"> <div class="col"> <h1 style="text-align: center;">筆記本</h1> <!-- 以下為php從資料庫撈取資料並且輸出畫面的程式碼 --> <?php $server = "localhost"; # MySQL/MariaDB 伺服器 $dbuser = "root"; # 使用者帳號 $dbpassword = ""; # 使用者密碼 $dbname = "test"; # 資料庫名稱 $connection = new mysqli($server, $dbuser, $dbpassword, $dbname); # 檢查連線是否成功 if ($connection->connect_error) { die("連線失敗:" . $connection->connect_error); } # MySQL/MariaDB 指令 $sqlQuery = "SELECT id,title,content FROM notes"; # 執行 MySQL/MariaDB 指令 if ($result = $connection->query($sqlQuery)) { # 取得結果 // output data of each row while($row = $result->fetch_assoc()) { //輸出html畫面 echo "<div class='col-12 text-right'><button type='button' class='btn btn-danger' onclick=deleteArticle('".$row["id"]."')>刪除</button></div>"."<h5 style='color: red;'>標題</h5>" . $row["title"].'<br>'. "<h5 style='color: red;'>內容</h5>" . $row["content"]."<hr>"; } # 釋放資源 $result->close(); } else { echo "執行失敗:" . $connection->error; } # 關閉 MySQL/MariaDB 連線 $connection->close(); ?> </div> </div> <div class="row mt-5"> <div class="col"> <div class="form-group"> <label for="title">標題</label> <input type="email" class="form-control" id="title" placeholder="最多100字..."> </div> <div class="form-group"> <label for="content">內容</label> <textarea class="form-control" id="content" rows="3" placeholder="請填寫內容"></textarea> </div> <button type="submit" class="btn btn-primary" id="enter">送出資料</button> </div> </div> </div> <!-- Optional JavaScript --> <!-- jQuery first, then Popper.js, then Bootstrap JS --> <script src="https://code.jquery.com/jquery-3.2.1.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.6/umd/popper.min.js" integrity="sha384-wHAiFfRlMFy6i5SRaxvfOCifBUQy1xHdJ/yoi7FRNXMRBu5WHdZYu1hA6ZOblgut" crossorigin="anonymous"></script> <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.2.1/js/bootstrap.min.js" integrity="sha384-B0UglyR+jN6CkvvICOB2joaf5I4l3gm9GU6Hc1og6Ls7i6U/mkkaduKaBhlAXv9k" crossorigin="anonymous"></script> </body> </html> <script type="text/javascript"> // 等全部的DOM元素下載完後就會觸發,觸發時間較早 // 補充 : window.onload是等整個網站都下載完成才會跑,如果有100張圖 , 要等100張圖下載完才會執行 , 適合用在廣告的載入 $(document).ready(function() { $("#enter").click(function() { //ID 為 submitExample 的按鈕被點擊時 $.ajax({ type: "POST", //傳送方式 , 常用的傳送方式有 post 和 get url: "insert.php", //傳送目的地 dataType: "json", //資料格式 , 傳送文字訊息都用json , 圖片的話用formdata data: { //傳送資料 title: $("#title").val(), //表單欄位 ID title content: $("#content").val() //表單欄位 ID content }, success: function(data) { if (data.result == 'success') { //如果後端回傳 json 是成功的話 //回傳正確資料的話 , 重新整理畫面 location.reload(); } if (data.result == 'error') { //彈跳視窗顯示錯誤訊息 alert(data.errorMsg); } }, error: function(jqXHR) { alert('發生錯誤'); } }) }) }); function deleteArticle(id) { $.ajax({ type: "POST", url: "delete.php", dataType: "json", data: { id: id, }, success: function(data) { if (data.result == 'success') { location.reload(); } if (data.result == 'error') { //彈跳視窗顯示錯誤訊息 alert(data.errorMsg); } }, error: function(jqXHR) { alert('發生錯誤'); } }) } </script>
delete.php
<?php
$id = $_POST["id"]; //取得 nickname POST 值
if (empty($id)) {
echo json_encode(array(
'result' => 'error',
'errorMsg' => '請輸入標題 !'
));
//因為資料錯誤所以強制停止程式碼
exit();
}
$server = "localhost"; # MySQL/MariaDB 伺服器
$dbuser = "root"; # 使用者帳號
$dbpassword = ""; # 使用者密碼
$dbname = "test"; # 資料庫名稱
# 連接 MySQL/MariaDB 資料庫
$connection = new mysqli($server, $dbuser, $dbpassword, $dbname);
# 檢查連線是否成功
if ($connection->connect_error) {
die("連線失敗:" . $connection->connect_error);
}
# MySQL/MariaDB 指令 , 使用 '' 來放PHP變數
$sqlQuery = "DELETE FROM notes WHERE id = '$id'";
# 執行 MySQL/MariaDB 指令
if ($connection->query($sqlQuery) === TRUE) {
echo json_encode(array(
'result' => 'success'
));
} else {
# 執行失敗並顯示錯誤訊息
echo json_encode(array(
'result' => 'error',
'errorMsg' => '資料庫錯誤訊息 : '.$connection->error
));
}
# 關閉 MySQL/MariaDB 連線
$connection->close();
?>
終於做出一個簡單的網站了~ 💯 💯 💯
但是您會發現 , 程式碼是不是有點亂呢 , 如果是一個大型的專案 , 每個開發者都依照自己的開發模式 , 開了一堆的檔案 , 又不寫註解 , 最後程式碼會變得非常地難維護.....
所以PHP出現了非常多的框架(framework) ,在開發的時候 , 大家都照著這個框架的開發模式去開發 , 維護和開發上就會變得非常的有效率 , 現在最有名的應該就是 laravel 了吧 ~
下次有機會在介紹給大家 ~
留言
張貼留言