Yakim shu Hi, 這是我擴充腦內海馬體的地方。

[第九週] 後端基礎 - PHP、資料庫、SQL 語法

後端「實際上」到底是什麼?

  1. 伺服器 Apache : 需要有一個伺服器來處理 Request 跟 Response
    • Server => 程式,專門處理 request & response 的程式
  2. 寫程式 PHP : 需要寫程式來處理
    • PHP => 接收 request 處理成 output,通常是 html
  3. 資料庫 MySQL : 需要有資料庫可以儲存資料
    • 資料庫系統 => 程式,專門操作有關資料的程式,提供一些更有效率查找、修改資料的方法。

接收 Request 流程

1. 接收 request
2. server 轉給 php 處理  (重要)
3. php 處理轉成 html 
4. html 傳給 server 
5. server 回傳 response

request => apache => php => output(html) => apache => response

也可以用 cmd 輸出 php 程式碼

php <file-name>.php

如果要改 Apache 預設根目錄

打開設定檔,路徑: apache2/ => conf/ => httpd.conf

php 的網址規則是由 server 決定的,所以你不會再 facebook 上看到 facebook.com/index.php,但通常 apache 預設的規則是: php 的網址的結構就是按照資料夾目錄。


基礎 PHP 語法

開始寫 PHP

<?php
    echo 'hello world';
?>
<?php
for ($i = 0; $i < 3; $i++) {
    echo $i . '<br>';
}
?>
<?php
$arr = array(1, 2, 3, 4, 5);
$length = sizeof($arr); // 陣列長度
echo $arr[$length - 1]; // 印出最後一個
var_dump($arr); // 輸出 type, value
print_r($arr); // 輸出 value

/* var_dump 輸出結果 */
array(4) {
  [0]=>
  string(3) "one"
  [1]=>
  int(2)
  [2]=>
  string(5) "three"
  [3]=>
  bool(false)
}

/* print_r 輸出結果 */
Array
(
    [0] => one
    [1] => 2
    [2] => three
    [3] => 
)
?>

接收 request

<?php
$username = $_GET['username'];
if (isset($_GET['username'])) {
  // do something...
}
?>

資料庫系統

其實 excel 也是一種資料庫

關聯式資料庫 Relational database

用不同的 table 去存取不同類型的內容,但各個 table 之間是有相關性的。

好處是避免不相關的資料互相干擾。

關聯式資料語言 SQL ( Structured Query Language )

是一種程式語言,專門拿來操作關聯式資料庫,簡單來說,就是用指令去操作資料庫。

一般來說,是比較常用的資料庫系統。

比較有名的是 MySQL, PostgreSQL

非關聯式資料語言 NoSQL ( Not only SQL )

相較於 SQL 只能儲存單一型態的資料, NoSQL 可以儲存的資料更複雜一些,比較常用於存 log 日誌,優點是比較彈性,如果要新增欄位,不用去更改資料庫設計。

比較有名的是 mongoldb

管理資料庫 phpMyAdmin

輸入此網址: http://localhost:8080/phpmyadmin

為一個用 PHP 寫的 GUI 資料庫管理軟體,其本質就是一個 PHP 檔案,用處是以網頁的介面來管理你的資料庫。

類似的資料庫管理軟體: sequel pro


Table schema 結構簡介

資料型態

資料庫結構 Table schema 是在開一個資料庫前,要設定好資料型態、有無預設值、是否為唯一… 等等的設定,而之後的資料都要以符合當初設定的結構,否則無法新增。

varchar 跟 text 的差別?

查詢速度:


索引 index

可以當成是書本的目錄,資料庫系統會幫你建立某欄位的索引,目的是 加快搜尋的速度。

Index

Primary Index (PK) 主鍵

Unique Index 唯一


MySQL 基礎語法介紹

查詢 SELECT

where name = 'peter' and id=2 // => &
where name = 'peter' or id=2 // => ||

從 users 這個 table 裡面找到是 peter 的那列 並且把 phone 這個欄位的值取出來

select phone from users
where name = 'peter'

把 users 這個 table 裡面的 id & content 欄位取出來

select id, content from users

把 user 這個 table 裡面所有的欄位取出來: *

select * from users

刪除 DELETE

刪除 users 裡面 name 是 peter 的那列

delete from users
where name = 'peter'

但有時候刪除的做法不同,像是某些比較重要的欄位,通常不會直接刪除,怕造成無法挽回的後果。 所以比較常見的是新稱一個 is_deleted 欄位,放一個 boolean 值,如果要刪除他就把此欄位設成 1。

所以篩選資料的時候,where 會將上條件 : where is_deleted = 0

更新 UPDATE & SET

更新 user 裡面 name 是 peter 的那列 把 phone 設為 123、age 設為 20

where 條件很重要,不然會所有欄位都一起更新 )

update users set phone = 123, age = 20
where name = 'peter'

新增 INSERT INTO & VALUES

新增一筆紀錄,name: peter, phone: 123 ( 兩個括號是對應的關係 )

insert into users(name, phone)
values ('peter', 123)

設定編碼及時區

<?php
$conn->query("SET NAMES 'UTF8'"); // => 編碼
$conn->query("SET time_zone = '+08:00'"); // => 台灣時區
?>

( 以上內容大部分是 程式導師實驗計畫第三期 的學習筆記,如有錯誤歡迎糾正,非常感謝 🤓 )