# PHP 與 MySQL
## 語法基礎
- .寫php 一定要用標籤包起來
```
<?php
?>
```
- 一定要加分號
- 變數用 $ 來表示,例如
```
$a =1;
```
- 在php內,兩個變數字串想要拼起來,不能用 + (數字才可以),要用 .
- 換行` <br>`
- ` sizeof( ) `陣列長度
- `echo `沒辦法輸出陣列,他會要求需要轉成字串 ,所以輸出還有另外一種用法 `var_dump` 他會把每個變數的型態跟質一起印出來,另外還有一個` print_r `可以使用
簡單範例
**if, else:**
```
<?php
$score = 60;
if ($score >= 60){
echo "pass";
} else {
echo "fail";
}
?>
```
**迴圈:**
```
<?php
for($i=1; $i<=10; $i++){
echo $i;
}
?>
```
**陣列:**
```
<?php
$arr = array(1,2,3,4,5);
echo $arr[sizeof($arr) - 1];
?>
```
**函式:**
```
<?php
function add($a, $b) {
return $a + $b;
}
echo add(1, 3);
?>
```
自行補充
PHP mysql_query() 函數使用方法
mysql_query() 函數在 PHP 中是常用的 MySQL 資料庫語法,用來判斷資料庫查詢是否成功,如果查詢成功則會回傳 true,否則回傳 false,一般在與資料庫連結後才能使用,如果沒有先建立資料庫連結,則會自動透過 mysql_connect() 這個函式去取得一個連結,當然這樣的狀況並不是很好,所以建議先確認你的 PHP 與 MySQL 連結以正確建立,基本語法如下
mysql_query( string query [, resource connection] );
_
```
<?php
// 包在裡面才會被當作是 php 的內容
// 每行結尾必須要有分號 ;
echo "123"; // 輸出 123
echo "<h1>ABC</h1>";
$a = "Za ";
// $ 代表設變數的意思,任何變數的最前面必定有 $
$b = "Warudo!!!"
echo $a . $b; // 輸出 $a 和 $b 兩個變數字串拼接的內容
?>
_
```
_
## Apache 與 PHP 原理簡介
_
**request => apache => php => html => apache => response**
- **server** : 專門處理 request 和 response 的程式
- **資料庫系統**:專門處理資料的程式
- **關聯式資料庫**:關聯資料語言 SQL,最有名的例如 MySQL,PostgreSQL
- NoSQL (not only SQL) 資料庫
_
## Table 的 schema 結構
Primary key(PK) 主鍵
_
**從 PHP 連線到 MySQL 資料庫**
_
在php檔案前面 包入
```
<?php
```
先宣告變數
```
$server_name = 'localhost';
$username = 'hsinyu';
$password = '7453';
$db_name = 'hsinyu';
$conn = new mysqli($server_name, $username, $password, $db_name);
```
(方便 debug 讓他印出 warming)
```
if ($conn->connect_error) {
die ‘資料庫連線錯誤:’.$conn->connect_error’;
}
```
(->存取)
(如果 $conn->connect_error 是 true 的話,就 die (不要繼續跑下面的程式) 並顯示資料庫連線錯誤)
連線完要加上下面這兩行,編碼跟時區比較不會有問題
```
$conn->query(’SET NAMES UTF8’);
$conn->query(‘’SET time_zone = “+8:00”)
?>
```
_
讓 conn 獨立成為一個 php 檔
因為裡面有帳號密碼,上傳 github 的時候要小心不能上傳
git 的時候要寫 gitignore
然後加進其他的檔案
require_once('conn.php');
_
### PHP 與 MySQL 的互動:讀取資料
```
<?php
require_once('conn.php');
$result = $conn->query("SELECT * FROM users");
if (!$result) {
die($conn->error);
}
while ($row = $result->fetch_assoc()) {
echo "id:" . $row['id'] . '<br>';
echo "username:" . $row['username'] . '<br>';
}
?>
```
### PHP 與 MySQL 的互動:新增資料
```
<?php
require_once('conn.php');
if (empty($_POST['username'])) {
die('請輸入 username');
}
$username = $_POST['username'];
$sql = sprintf(
"insert into users(username) values('%s')",
$username
);
$result = $conn->query($sql);
if (!$result) {
die($conn->error);
}
header("Location: index.php");
?>
```
### PHP 與 MySQL 的互動:刪除資料
```
<?php
require_once('conn.php');
if (empty($_GET['id'])) {
die('請輸入 id');
}
$id = $_GET['id'];
$sql = sprintf(
"delete from users where id = %d",
$id
);
echo $sql . '<br>';
$result = $conn->query($sql);
if (!$result) {
die($conn->error);
}
if ($conn->affected_rows >= 1) {
echo '刪除成功';
} else {
echo '查無資料';
}
// header("Location: index.php");
?>
```
### PHP 與 MySQL 的互動:編輯資料
```
<?php
require_once('conn.php');
if (empty($_POST['id']) || empty($_POST['username'])) {
die('請輸入 id 與 username');
}
$id = $_POST['id'];
$username = $_POST['username'];
$sql = sprintf(
"update users set username='%s' where id=%d",
$username,
$id
);
echo $sql . '<br>';
$result = $conn->query($sql);
if (!$result) {
die($conn->error);
}
header("Location: index.php");
?>
```