PHP結合MySQL

資料庫連線

<?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)

phpmyadmin

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"

?>

 

 

發表迴響

你的電子郵件位址並不會被公開。 必要欄位標記為 *