資料庫存取#1
20 minutes to go
資料庫連線
中文issue
新增 INSERT INTO
查詢 SELECT...FROM
修改 UPDATE
刪除 DELETE
SELECT "欄位名" FROM "表格名";
欄位名
表格名
SELECT * FROM survey;
SELECT name, mail FROM survey;
$sql = "SELECT * FROM survey"; // SQL字串
$result = mysql_query($sql); // 查詢
// 在while迴圈搭配使用
mysql_fetch_array($result, MYSQL_BOTH); // MYSQL_BOTH指可用0,1,2...或欄位名稱id, name, mail兩種方式
// 或者使用
mysql_fetch_assoc($result); // 只能用欄位名稱
<?php
include_once('db.php'); // 資料庫連線
$agestr = array(0 => "沒有選", 1 => "19歲以下", 2 => "20~29歲", 3 => "30~39歲", 4 => "40歲以上");
$brand = array(1 => 'Apple', 2 => '三星', 3 => 'hTC', 4 => 'Sony');
mysql_query("SET NAMES 'utf8'"); // 處理中文
$sql = "SELECT * FROM survey"; // SQL查詢指令
$result = mysql_query($sql); // 執行SQL,回傳查詢結果
while ($row = mysql_fetch_array($result, MYSQL_BOTH)) {
echo $row['id'] . ' '; // 印出id欄位值
echo $row['name'] . ' '; // 印出姓名欄位值
echo $row['mail'] . ' '; // 印出電子郵件欄位值
echo $agestr[$row['age']] . ' '; // 印出年齡欄位轉換後字串
$phone = explode('|', $row['brand']); // 將字串轉成陣列,如 1|3|4 轉成陣列
foreach ($phone as $value) {
echo $brand[$value] . ' ';
}
echo '<BR>';
}
?>
20 minutes to go
# 排序語法 ORDER BY
# ASC 由小到大
# DESC 由大到小
SELECT "欄位名"
FROM "表格名"
[WHERE "條件"]
ORDER BY "欄位名" [ASC, DESC];
#以id欄位由大到小排列
SELECT * FROM survey ORDER BY id DESC;
<?php
# 定義常數, 將陣列序列化 (php 5.5版以下)
define ("FRUITS", serialize (array ("apple", "cherry", "banana")));
# 使用,反序列化
$my_fruits = unserialize (FRUITS);
<?php
# 定義常數, 將陣列序列化
define('AGESTR', serialize(array(0 => "沒有選", 1 => "19歲以下", 2 => "20~29歲", 3 => "30~39歲", 4 => "40歲以上")));
define('BRAND', serialize(array(1 => 'Apple', 2 => '三星', 3 => 'hTC', 4 => 'Sony')));
<?php
include_once 'constant.php';
$agestr = unserialize(AGESTR); // 使用前,反序列化
$brand = unserialize(BRAND); // 使用前,反序列化
constant.php
index.php
<?php
include_once('db.php'); // 資料庫連線
include_once('constant.php');
$agestr = unserialize(AGESTR);
$brand = unserialize(BRAND);
mysql_query("SET NAMES 'utf8'"); // 處理中文
$sql = "SELECT * FROM survey"; // 查詢
$result = mysql_query($sql);
while ($row = mysql_fetch_array($result, MYSQL_BOTH)) {
echo $row['id'] . ' ';
echo $row['name'] . ' ';
echo $row['mail'] . ' ';
echo $agestr[$row['age']] . ' ';
$phone = explode('|', $row['brand']); // 將字串轉成陣列,如 1|3|4 轉成陣列
foreach ($phone as $value) {
echo $brand[$value] . ' ';
}
echo '<BR>';
}
?>
10 minutes to go
<?php
# php 5.6以上版本可用 const直接定義,不需序列化
const DEFAULT_ROLES = array('guy', 'development team');
資料庫連線
中文issue
新增 INSERT INTO
查詢 SELECT...FROM
修改 UPDATE
刪除 DELETE
UPDATE "表格名"
SET "欄位1" = [新值]
WHERE "條件";
$id = $_POST['id'];
$mail = $_POST['mail'];
// ...
$sql = "UPDATE survey SET mail='$mail' WHERE id='$id'"; // SQL字串
$result = mysql_query($sql); // 修改
UPDATE Store_Information
SET Sales = 500
WHERE Store_Name = 'Los Angeles'
AND Txn_Date = 'Jan-08-1999';
500
UPDATE "表格名"
SET "欄位1" = [新值]
WHERE "條件";
$id = $_POST['id'];
$mail = $_POST['mail'];
// ...
$sql = "UPDATE survey SET mail='$mail' WHERE id='$id'"; // SQL字串
$result = mysql_query($sql); // 修改
UPDATE Store_Information
SET Sales = 500
WHERE Store_Name = 'Los Angeles'
AND Txn_Date = 'Jan-08-1999';
500
20 minutes to go
資料庫連線
中文issue
新增 INSERT INTO
查詢 SELECT...FROM
修改 UPDATE
刪除 DELETE
DELETE FROM "表格名"
WHERE "條件";
$id = $_POST['id'];
// ...
$sql = "DELETE FROM survey WHERE id='$id'"; // SQL字串
$result = mysql_query($sql); // 刪除
DELETE FROM Store_Information
WHERE Store_Name = 'Los Angeles';
10 minutes to go
規劃期 | 製作前期 | 製作期 | 上架期 |
---|---|---|---|
規格書 | Wireframe | 後端 | 測試 |
UI flow | 前端 | 上架 | |
Mockup | 設計 | 維運 | |
Prototype |
程式開發
系統分析
測試維運
搭配系統草圖(wireframe)
查詢Select
新增Insert into
刪除Delete
修改Update
http://pmtips.net/wp-content/uploads/2012/06/hands-on-PM.jpg
<form action="dispatch.php" method="post">
<input type="submit" value="刪除" name="delete">
<input type="submit" value="修改" name="update">
</form>
header("Location: http://example.com/myOtherPage.php");
// 或是
$action = 'delete.php';
header("Location: " . $action);
<?php
if ($_POST['delete']) {
header('Location: ' . 'delete.php');
die();
}
if ($_POST['update']) {
header('Location: ' . 'update.php');
die();
}
<form action="dispatch.php" method="post">
<input type="submit" value="刪除" name="delete">
<input type="submit" value="修改" name="update">
</form>
<?php
if ($_POST['delete']) {
header('Location: ' . 'delete.php');
die();
}
if ($_POST['update']) {
header('Location: ' . 'update.php');
die();
}
?>
<!DOCTYPE html>
...
。root帳號:超級管理員
需要密碼保護
僅用於後台管理
。務必建立其他帳號(非超級管理員)
$cfg['Servers'][$i]['auth_type'] = 'http'; /* 將config改成http */
$cfg['Servers'][$i]['AllowNoPassword'] = true; /*要改成true,因為MySQL root預設為空白 */
資料庫與帳號名稱相同
資料庫主機位置
本機
務必改為 utf8_general_ci
確認資料庫名稱
完成
建立資料表
資料庫連線
中文儲存與顯示問題
database.php
page1.php
page2.php
重複使用
<?php
include_once 'database.php';
$link = mysql_connect($server, $username, $password); // 連接伺服器
if( !$link) {
die('無法連接資料庫');
}
$db = mysql_selectdb($dbname, $link) ; // 開啟資料庫
if (!$db) {
die('無法開啟資料庫');
}
mysql_close($link); // 關閉資料庫連線
?>
<?php
$server = 'localhost'; // 伺服器
$username = 'first_db'; // 帳號
$password = 'xxxxxx'; // 密碼
$dbname = 'first_db'; // 資料庫名稱:當初建立時與帳號相同
?>
10 minutes to go
<?php
include_once 'database.php'
$link = mysql_connect($server, $username, $password); // 連接伺服器
if( !$link) {
die('無法連接資料庫');
}
$db = mysql_select_db($dbname, $link) ; // 開啟資料庫
if (!$db) {
die('無法開啟資料庫');
}
/*
資料庫存取:新增 修改 查詢 刪除
*/
mysql_close($link); // 關閉資料庫連線
?>
每個頁面重複
database.php
<?php
include_once 'database.php'
/*
資料庫存取:新增 修改 查詢 刪除
*/
mysql_close($link); // 關閉資料庫連線
?>
每個頁面重複
<?php
$server = 'localhost'; // 伺服器
$username = 'first_db'; // 帳號
$password = 'xxxxxx'; // 密碼
$dbname = 'first_db'; // 資料庫名稱:當初建立時與帳號相同
$link = mysql_connect($server, $username, $password); // 連接伺服器
if( !$link) {
die('無法連接資料庫');
}
$db = mysql_select_db($dbname, $link) ; // 開啟資料庫
if (!$db) {
die('無法開啟資料庫');
}
?>
資料庫連線
中文儲存與顯示問題
<?php
include_once('db.php'); // 引入db.php
mysql_query("SET NAMES 'utf8'"); //處理寫入資料庫時的編碼問題
/*
資料庫存取:新增 修改 查詢 刪除
*/
mysql_close($link); // 關閉資料庫連線
?>
<?php
// ....[略]....
$db = mysql_select_db($dbname, $link) ; // 開啟資料庫
if (!$db) {
die('無法開啟資料庫');
}
mysql_query("SET NAMES 'utf8'"); //處理寫入資料庫時的編碼問題
database.php
<html>
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
<form name="form1" method="post" action="confirm.php">
<p>
<label for="name"></label>
姓名: <input type="text" name="name" id="name">
<br>
電子郵件:
<label for="mail"></label>
<input type="text" name="mail" id="mail">
</p>
<p>
<label>請勾選年紀:<br>
<input type="radio" name="age" value="0" id="age_0">
19歲以下</label>
<br>
<label>
<input type="radio" name="age" value="1" id="age_1">
20~29歲</label>
<br>
<label>
<input type="radio" name="age" value="2" id="age_2">
30~39歲</label>
<br>
<label>
<input type="radio" name="age" value="3" id="age_3">
40歲以上</label>
<br>
</p>
<p>
<input type="submit" name="button" id="button" value="送出">
<input type="reset" name="button2" id="button2" value="重設">
</p>
</form>
</body>
</html>
<?php
include_once('database.php'); // 引入db.php
$name = $_POST['name'];
$mail = $_POST['mail'];
if (isset($_POST['age'])) {
$age = $_POST['age'];
} else {
$age = 0;
}
$sql = "INSERT INTO `first_db`.`survey` "
. "(`id`, `name`, `mail`, `age`)"
. " VALUES (NULL, '$name',"
. " '$mail', "
. "'$age');";
mysql_query($sql); // 新增資料
mysql_close($link); // 關閉資料庫連線
?>
<?php
$sql = "INSERT INTO `first_db`.`survey` "
. "(`id`, `name`, `mail`, `age`, `brand`)"
. " VALUES (NULL, '$name',"
. " '$mail', "
. "'$age',"
. " '$phonestr');";
?>
發生執行錯誤時,通常無明顯錯誤訊息!
解決方案:使用他人提供的函式庫
解壓縮後,複製檔案至lib下
;extension=php_pdo_mssql.dll
extension=php_pdo_mysql.dll
;extension=php_pdo_oci.dll
;extension=php_pdo_mssql.dll
extension=php_pdo_mysql.dll
;extension=php_pdo_oci.dll
<?php
include_once 'lib/medoo.php';
$options = array(
'database_type' => 'mysql', // 預設
'database_name' => '你的資料庫名稱',// 資料庫名稱
'server' => 'localhost', // 伺服器:本機
'username' => '你的帳號名稱', // 帳號
'password' => '你的密碼', // 密碼
'charset' => 'utf8');
$database = new medoo($options);
$database->query("SET NAMES 'utf8'");
?>
<?php
include_once 'database.php';
$name = $_POST['name'];
$mail = $_POST['mail'];
if (isset($_POST['age'])) {
$age = $_POST['age'];
}
// 新增資料
$last_user_id = $database->insert("survey", array(
"name" => $name,
"mail" => $mail,
"age" => $age
));
?>
survey資料表
<?php
include_once 'database.php';
// 兩個參數,第一個為資料表名稱,第二個為選取的欄位
// * 代表全選
$result = $database->select("survey", "*");
// 顯示查詢結果
foreach ($result as $row) {
echo $row['id'] . ' ';
echo $row['name'] . ' ';
echo $row['mail'] . ' ';
echo $row['age'] . ' ';
echo '<BR>';
}
?>
if (isset($_POST['age'])) {
$age = $_POST['age'];
} else {
$age = 1;
}
// 新增資料
$last_user_id = $database->insert("survey", [
"name" => $name,
"mail" => $mail,
"age" => $age
]);
?>
<?php
include_once 'lib/medoo.php';
$options = array(
'database_type' => 'mysql', // 預設
'database_name' => '你的資料庫名稱',// 資料庫名稱
'server' => 'localhost', // 伺服器:本機
'username' => '你的帳號名稱', // 帳號
'password' => '你的密碼', // 密碼
'charset' => 'utf8');
$database = new medoo($options);
$database->query("SET NAMES 'utf8'");
/*回傳陣列:回傳mysql資料庫裡的enum設定值,並將其轉為陣列*/
function enum_list($table, $field) {
global $database;
$type = $database->query("SHOW COLUMNS FROM $table WHERE Field = '$field'")
->fetchAll();
preg_match("/^enum\(\'(.*)\'\)$/", $type[0]['Type'], $matches);
$enum = explode("','", $matches[1]);
return $enum;
}
修改database.php,加入enum_list
<html>
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
<?php
include_once 'database.php';
?>
<form name="form1" method="post" action="confirm.php">
<p>
<label for="name"></label>
姓名:
<input type="text" name="name" id="name">
<br>
電子郵件:
<label for="mail"></label>
<input type="text" name="mail" id="mail">
</p>
<p>
<label>請勾選年紀:<br>
<?php
$age_options = enum_list('survey', 'age');
foreach ($age_options as $key => $value) {
?>
<input type="radio" name="age" value="<?= $key + 1 ?>" id="age_0">
<?= $value ?></label>
<br>
<?php
}
?>
</p>
<p>
<input type="submit" name="button" id="button" value="送出">
<input type="reset" name="button2" id="button2" value="重設">
</p>
</form>
</body>
</html>
表單: survey.php
<label>請勾選年紀:<br>
<?php
$age_options = enum_list('survey', 'age');
foreach ($age_options as $key => $value) {
?>
<input type="radio" name="age" value="<?= $key + 1 ?>">
<?= $value ?></label>
<br>
<?php
}
?>
<html>
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
<?php
include_once 'database.php';
if (empty($_POST['name']) || empty($_POST['mail']) || !isset($_POST['age'])) {
echo '資料未填寫完成' . '<br>';
} else {
$name = $_POST['name'];
$mail = $_POST['mail'];
$age = $_POST['age'];
// 新增資料
$last_user_id = $database->insert("survey", [
"name" => $name,
"mail" => $mail,
"age" => $age
]);
}
?>
<?php
// 查詢資料
$result = $database->select("survey", "*");
foreach ($result as $row) {
echo $row['id'] . ' ';
echo $row['name'] . ' ';
echo $row['mail'] . ' ';
echo $row['age'] . ' ';
echo '<BR>';
}
?>
<a href="survey.php">返回前頁</a>
</body>
</html>
處理程式: confirm.php
<?php
include_once 'lib/medoo.php';
$options = array(
'database_type' => 'mysql', // 預設
'database_name' => '你的資料庫名稱',// 資料庫名稱
'server' => 'localhost', // 伺服器:本機
'username' => '你的帳號名稱', // 帳號
'password' => '你的密碼', // 密碼
'charset' => 'utf8');
$db = new medoo($options);
$db->query("SET NAMES 'utf8'");
?>
以database.inc.php為例:
資料庫變數為$db
$db->select($table, $columns, $where)
查詢方式
$table: 表格名稱(字串)
$columns: 讀取之欄位名稱(字串/陣列)
$where(選填): 過濾條件(陣列)
查詢結果:陣列
$columns = array('name','mail', 'age');
$where = array('age' => '19歲以上' )
$result = $db->select('survey', $columns, $where)
foreach($result as $row) {
echo "姓名:". $row['name'] . ' 信箱:' . $row['mail] . '<br>';
}
$result= $db->select(
"survey", // 表格名
"name", // 只讀取一欄
array("mail" => "foo@bar.com") // mail值 等於 foo@bar.com
);
$result= $db->select(
"student", // 表格名
array("sid","name","score"), // 讀取三欄
array("score" => 100) // score 等於 100
);
$result= $db->select(
"student", // 表格名
array("sid","name","score"), // 讀取三欄
array("score[>=]" => 60) // score 大於等於 60
);
$result= $db->select(
"survey", // 表格名
"name", // 只讀取一欄
array("salary[<>]" => [200, 500]) // salary介於200~500
);
$result= $db->select(
"student", // 表格名
array("sid","name","mail"), // 讀取三欄
array("OR" => array( // 兩個條件 or組合
"sid" => array(2, 123, 234, 54),
"mail" => array("foo@bar.com", "cat@dog.com")
)
)
);