資料庫連線
<?php
//網址:localhost 因為網頁跟資料庫的伺服器在電腦上面
//登入帳號:root(預設)
//密碼:留空
mysql_connect("localhost", "root", "");
?>
檢査資料庫連線是否成功
<?php
$Connect=mysql_connect("localhost", "root", "");
if (!$Connect) {
die("連線失敗,錯誤訊息:".mysql_error());
}
echo "連線成功";
mysql_close($Link);
?>
選擇資料庫
<?php
//DB:DataBase
//member是要操作的資料庫名稱
mysql_select_db("hahow");
?>
資料庫長得像這樣
左邊這排外排的就是資料庫 (hahow, information_schema, mysql, performance_schema, phpmyadmin, test)
内縮的是資料表 (mem, member)
SQL査詢指令
<?php
//SELECT後面接欄位,*代表所有欄位
//FROM後面接資料表,從member這個資料表裡面讀取
//mysql_query()裡面的東西用""包起來
//査詢member這個資料表裡面所有内容
//將mysql_query()的回傳値存在$re裡面
$re=mysql_query("SELECT * FROM member");
?>
回傳資料處理 mysql_fetch_array()
<?php
$re=mysql_query("SELECT * FROM member");
//在回傳値$re中擷取其中一筆資料出來
$row=mysql_fetch_array($re);
//提取第一筆name資料
//如果要提取很多資料,必須寫成迴圈
echo $row["name"];
//資料會存成陣列
/************寫成迴圈版本**************/
$re=mysql_query("SELECT * FROM member");
while($row=mysql_fetch_array($re)){
echo $row["name"];
//只要條件符合,就會一筆一筆地把資料處裡過去
}
?>
MySQL指令使用變數
<?php
//mysql_query()裡面的MySQL指令中的變數
//要用單引號'包起來
//並且變數裡面不能有雙引號"
$re=mysql_query("SELECT * FROM member" WHERE email='$_GET[email]'");
?>
抓取資料總筆數 mysql_num_rows()
<?php
$re=mysql_query("SELECT * FROM member");
//mysql_num_rows()裡面放存mysql_fetch_array()的變數
$dataNum=mysql_num_rows($re);
echo $dataNum;
//會顯示總共有幾筆資料
?>
SQL Injection 資料庫隱碼注入攻擊
<?php
//沒有防護措施的原始php
//"$_GET["email"]"是要産生MySQL指令的片段
SELECT * FROM member WHERE id="$_GET["email"]"
//正常的情況下:使用者填入正常的email
SELECT * FROM member WHERE id="MingWang@gmail.com"
//SQL query査詢功能會回傳符合id="MingWang@gmail.com"的資料
//受到攻擊:有人輸入" OR "1"="1
SELECT * FROM member WHERE id="" OR "1"="1"
//id不一定等於空値,但是1永遠等於1,所以true
//所有資料都符合id="" OR "1"="1",所以會回傳所有資料
//結果:不論帳號密碼是對或錯,都可以直接登入
?>
防止SQL Injection:mysql_escape_string()
<?php
//$q=使用者輸入的資料
//使用SQL query査詢指令之前先過濾
$q=mysql_escape_string($q);
//然後開始査詢
SELECT * FROM member WHERE id="$q"
?>