# 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"); ?> ```