基礎 PHP & MySQL 資料庫


Posted by chihyu on 2021-01-25

環境設置:XAMPP (Apache + MariaDB + PHP + Perl)

php 基礎

<?php ?>:php 執行標籤
echo:印出東西
$:變數宣告
A . B:字串拼接

<?php 
  $a = "123"; // 字尾記得加分號
  $b ="456";
  echo $a . $b; //輸出 123456 
?>

var_dump($arr):印出 array 的詳細資料(array 長度、index、值)
print_r($arr):印出 array 的詳細資料

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

apache 的功能

是一個 server,專門處理 request 跟 response 的程式
把 request 拿進來,傳到 php,php 去執行 php 的檔案,產生一個 output,傳回 apache,再傳回 client 端,變成 response

function run (request) {
    response = php(request)
    send response
}

apache 決定 request 傳到哪裡
apache 設定網址是檔案路徑

資料庫系統

是一個專門處理資料的程式
把資料存進去的地方,可以用程式去把資料放進去或撈出來
好用、好維護、效率好

關聯式資料庫

  • SQL
  • 用 table(資料表) 存放資料
  • 藉由兩個 tabel 的關聯取得兩個 table 的所有資料
  • 資料型態會有限制
  • 有名的資料庫系統:MySQL、PostgresSQL

非關聯式資料庫

  • NoSQL(Not only sql)
  • 資料型態較不受限,新增欄位比較自由
  • 有名的資料庫系統:mongodb

MySQL

(有另一個東西叫 MariaDB,兩個用起來差異不大)

phpMyadmin

一個管理 MySQL (資料庫) 的介面,是一個 php 檔案

table schema

資料結構

MySQL 基礎語法

SELECT [column] FROM [tabel] WHERE (column = value):查詢資料,在指定條件下,從某資料表撈出資料,
INSERT INTO [tabel] (column-a, column-b) VALUES(value-a, value-b):新增資料,在資料表插入資料
UPDATE [tabel] SET [column] = [value]:修改資料,更新資料表某欄位的值
DELETE FROM [tabel] WHERE (column = value) :刪除資料,刪除 tabel 裡指定條件的資料

Disable cache

DevTool -> Network -> 勾選 Disable cache
當檔案改變時發現沒有作用,是因為瀏覽器會暫存之前的的狀態,載入的東西是舊的,所以把 Disable 勾選起來避免東西被暫存

GET、POST

$_GET:在網址列後面用 "?" 加參數,表單 method 用 GET,php 用 $_GET 取到這個參數的值

// 網址列 http://localhost/a.php?a=123
// 表單
<form method="GET" action="php 檔">

// php 檔
<?php 
  echo $_GET['a']; //輸出 123
?>

$_POST:表單 method 用 POST,php 用 $_POST 取值

// 表單
<form method="POST" action="php 檔">
  <input type="text" name="a" />123

// php 檔
<?php 
  echo $_POST['a']; //輸出 123
?>

php 連線 MySQL 資料庫

  1. 新增使用者:
    到 phpMyadmin -> 新增使用者帳號,設定帳號、主機、密碼 -> 勾選建立與使用者同名的資料庫並授予權限 -> 全域權限勾選全選 -> 執行 => 就會出現新的 database 名稱是剛剛設定的帳號名
  2. 建立資料表:
    輸入資料表名稱、欄位名稱,設定型態、長度/值、編碼與排序、索引 -> 執行
  3. 資料庫連線設定檔
    注意:設定檔不要一起 commit 上去,不然帳號密碼會外洩
<?php 
  $server_name = 'localhost';
  $username = 'myusername';
  $password = 'mypassword';
  $db_name = 'mydb';

  $conn = new mysqli(
    '$server_name', '$username' '$password', '$db_name'
  );

  // 資料庫連線錯誤,用 die 讓下面程式停止執行
  if (!empty($conn->connect_error)) {
    die('資料庫連線錯誤:' . $conn->connect_error);
  }


  // 設定編碼、設資料庫時區
  $conn->query('SET NAMES UTF8');
  $conn->query('SET time_zone = "+8:00"');
?>
  1. 在 php 執行檔引入資料庫:
    用 query 拿到資料庫的資料(query() 裡面放 sql 的語法就可以選擇、編輯、刪除) -> 檢查有沒有結果 -> 如果有結果再用 fetch_assoc 拿到各個資料
<?php
  require_once($'conn.php');
  $result = $conn_query("SELECT * FROM users");
  if (!$result) {
    die($conn->error);
  }

  // 先把資料都 fetch_assoc(),用 while 取出所有使用者資料
  while ($row = $result->fetch_assoc()) {
    echo "id:" . $row['id'] . "<br>";
    echo "user:" . $row['username'];
  }

?>

資料應用

可以先把 MySQL 用一個變數接起來,再放進去 query()

新增資料:INSERT INTO

<?php
  ...
  $username = $_POST['username'];
  $sql = sprintf(
  "insert into users(username) values('%s')",
    $username
  );
  $result = $conn->query($sql);
  ...

  // 自動跳轉到某頁面 
  header("Location: index.php")
?>

刪除資料:DELETE FROM

$sql = sprintf(
    "delete from users where id = %d",
    $id
  );

編輯資料:UPDATE SET

$sql = sprintf(
    "update users set username='%s' where id=%d",
    $username,
    $id
  );

#Web #PHP #MySQL #apache







Related Posts

[心得] 滑鼠們2 - Logitech

[心得] 滑鼠們2 - Logitech

SQL-injection lab(10)

SQL-injection lab(10)

array 類型的內建函式

array 類型的內建函式


Comments