[php] 存取 MySQL 資料庫

php對資料庫的基本操作流程:

  1. 建立連線: mysql_connect()
  2. 選擇資料庫:mysql_select_db
  3. 對資料庫查詢/修改/新增/刪除:mysql_query()
  4. 取回查詢資料(resource)
  5. 讀取記錄(row):mysql_fetch_array()連線 MySQL 資料庫
    打開非持久的MySQL連結
    mysql_connect(伺服器位址,帳號,密碼)
    //將之後的連線設定成utf8編碼的sql指令
    mysql_query(‘SET NAMES UTF8’);
    //選擇資料庫
    mysql_select_db(DBName);

完整例子

class DB {
    function DB() {
        $this->host = "localhost"; // your host
        $this->db = "myDatabase"; // your database
        $this->user = "root"; // your username
        $this->pass = "mysql"; // your password

        $this->link = mysql_connect($this->host, $this->user,
$this->pass);

        mysql_select_db($this->db);
    }
}
// 在你需要開始使用資料庫的地方(記得先include起來)
$db = new DB();

查詢資料

//執行查詢資料的 SQL,會回傳資源代碼
$result = mysql_query("SELECT * FROM `talbe_name`"); 
//讀取查詢的結果
while ($row = mysql_fetch_array($result)) {
  echo "查詢出來的名字是$row['name']";  //或$row[0],$row[1],...
}
//取得查詢筆數
mysql_num_rows($result);


新增、刪除、修改資料

//新增
mysql_query("INSERT INTO `TableName` (`id`,`name`) VALUES ('1', '伍')");
//取得前次因 auto_increment 自動編號所新增的id 
$newID = mysql_insert_id(); 
//刪除
mysql_query("DELETE FROM `TableName` WHERE `name` = '伍'");
//修改
mysql_query("UPDATE `TableName` SET NAME = 'hippo' WHERE `id` = '1'");

//取得前次更動了幾筆資料
mysql_affected_rows();

安全處理

//如果string中有SQL用的特殊字元,會加上反斜線 mysql_real_escape_string(string)

接收表單文字時
function myStripslashes($value){
// 若 get_magic_quotes_gpc 功能已經開啟,就刪掉反斜線
if (get_magic_quotes_gpc())
        $value = stripslashes($value);
    return $value;
}
寫入資料庫時
mysql_real_escape_string($_POST[xxx]);

[php] Class and Object類別與物件

class MyClass {
//宣告常數
const PI = "3.1415926535";

//宣告成員
var $var1 = 'test';
var $var2;

//靜態成員
static $classname = 'MyClass';

//建構子
funtion __construct() {
    echo 'MyClass被建立';
}
//解構子
funtion __destruct() {
    echo 'MyClass被已解構';
}
//定義方法
funtion showHelloWorld() {
    echo 'HelloWorld!!';
}

//
funtion sum($a, $b) {
return $a + $b ;
}

//取得靜態成員svar1的值
funtion getsvar1($a, $b) {
    return MyClass::$svar1;
}
}
$myclass1 = new MyClass();
echo myclass1 -> var1; //test
$myclass1 -> sum(1,3);//4
echo MyClass::$classname ; //'MyClass'
echo MyClass::PI ; //'3.14......'

[php] Session

需要在echo和HTML語法顯示之前start

//開啟Session功能
session_start();

//建立Session user變數 值為gonex45
$_SESSION[‘user’] = ‘gonex45’;

//刪除Session
unset($_SESSION[‘user’]);

//刪除所有Session
session_unset();

 

//後期的IE7以上會禁止沒有宣告存取網域的session
session_set_cookie_params(3600, ‘/‘,$_SERVER[‘SERVER_NAME’]);

[php] Cookie 用戶端儲存資料

存放帳號,過期日期,購物車等 (密碼不適用,會被看光)

建立Cookie
setcookie(變數名, 變數值, 到期時間的時間戳記-可略)

必需在echo() 或HTML輸出前設定

讀取Cookie

echo $_COOKIE[‘name’];

刪除Cookie

setcookie(‘name’, 1, time()-10); //時間戳記設成過期即可

建立Cookie陣列
setcookie(“info[name]”, ‘gonex45’, time() + 3060);
setcookie(“info[mail]”, '[email protected]‘, time() + 30
60);

echo $_COOKIE[‘info’][‘name’] .’的e-mail為’. $_COOKIE[‘info’][‘mail’];

[php] Datetime日期時間函式

date($format_string)

echo date(‘Y-m-d h : i : s a’) ; // 2011-08-07 03:38:59 am

參數

Y    四位數             2011
y    二位數西元年   11


F    英文名稱     July
M    英文縮寫      Jan
m     二位月份       08
n   月份(不補零)    8
t      當月天數           28~31


d       二位數日期      01
j         不補零日期      1

時間
a       上下午小寫     am pm
A     上下午大寫     AM  PM
g     不補零12小時   1-12
h     12小時              01-12
G      不補零24小時    0-23
H     24小時                  00-23
i       分                        00-59
s       秒                        00-59


D      英文縮寫
I       英文名
N     星期         1(日)~7(六)
W     星期        0(日)~6(六)

時區
O        與格林威治標準時間時差              +0800

時間戳記

time()
傳回自1970 /01/01  00:00:00 到現在相差秒數

//顯示 2 小時後的日期時間
echo date(‘Y-m-d h : i : s a’, time() + 2 60 60);

取得指定日期時間的時間戳記
mktime(hour, minute, second, month, day, year)

設定時區
date_default_timezone_set(‘Asia/Taipei’);

[php] String字串處理

利用php內建的字串函式庫來處理字串

分割字串
$arr = explode(‘/‘, ‘71/12/03’);
→$arr[0] = 71 , $arr[1]=12 , $arr[2] = 03
正則表示式判斷字串(Regular Expression)
ereg(‘[A-Za-z]{1}[1-2]{1}[0-9]{8}’, ‘A123456789’);  // ture or false

取代字串內容
echo str_replace(‘技術學院’, ‘科技大學’, ‘國立台中技術學院’);  //國立台中科技大學
ereg_replace()//正則表示式版

格式化字串
echo sprintf(‘你好 %s 現在已經 %d 點了’ , ‘帥哥’ , 7);

清除左右空白
trim(string)

nl2br()
把換行字元取代成<br />

htmlspecialchars($str)
把& ‘ “ < > …… 取代成html符號

htmlentities($str)
把所有字元轉成html實體(含中文什麼的都會被轉掉)

[php] 小知識

isset($x)
檢查$x 是否被定義過

傳址呼叫
function double(&$x){
$x *= $x;
}
include()
引用錯誤會繼續執行
require()
引用錯誤會中斷執行
include_once() 和 require_once()
相同的php檔在同一頁只會被引用一次

nl2br()
把換行字元取代成<br />

==
值相等為真

===
值和型態相等才為真

foreach( $arr as $value){
echo $value;
}

foreach( $students as $name => $score){
echo “$name 考了 $score 分<br />”;
}

die($error_msg)
exit($error_msg)
中斷執行並顯示訊息

header() 設定HTTP 協定表頭
//網頁轉向到google
header(‘Location: http://www.google.com');
//設定網頁是utf-8
header(‘Content-Type: text/html; charset=utf-8’);

測試變數

isset($var) //是否被設定
empty ($var) //是否為0或空值
is_array($var) //是否 為陣列
is_int($var) //是否為int
is_null($var) //是否為null
is_numeric($var) //是否為數字或數字形式的字串
is_string($var) //是否 為字串

unset($var) //刪除變數

亂數
mt_rand(1,100) //隨機產生1-100 (windows最小0 最大32768)

FILELINE,分別代表目前正在被直譯執行的檔案名稱與執行的行數

 

//////2011/8/28///////////////

使用 ip2long() 和 long2ip() 函數來把 IP 地址轉化成整型存儲到數據庫里。這種方法把存儲空間降到了接近四分之一

在驗證 email 地址的時候使用 checkdnsrr() 函數驗證域名是否存在。

.使用 error_reporting(0) 函數來防止用戶看到潛在的敏感錯誤信息。]在理想情況下,發布伺服器應該在 php.ini 里完全禁止。但是如果你用的是一個共享的 web 伺服器的話,你沒有自己的 php.ini 文件,那么這種情況下你最好的選擇就是在所有腳本的第一行前加上 error_reporting(0);(或者使用 require_once() 方法)。這就能夠在出錯的時候完全屏蔽敏感的 SQL 查詢語句和路徑名。

.在網數據庫中存儲很大的字符串之前使用 gzcompress() 和 gzuncompress() 來顯式的壓縮/解壓字符串。這個 PHP 內置函數使用 gzip 算法,可以壓縮普通文本達 90%。

[php] 10個php新手應該知道的技巧

原文: http://www.phpbuilder.com/columns/vaska20050722.php3

Tip 1: MySQL 連結 Class

[php]class DB {
function DB() {
$this->host = "localhost"; // your host
$this->db = "myDatabase"; // your database
$this->user = "root"; // your username
$this->pass = "mysql"; // your password

$this-&gt;link = mysql_connect($this-&gt;host, $this-&gt;user,

$this->pass);
mysql_select_db($this->db);
}
}

// 在你需要開始使用資料庫的地方(記得先include起來)
$db = new $DB;[/php]

只要更改變數就可以馬上套用,讓你的程式碼更乾淨。

Tip 2: 安全性 (Dealing with Magic Quotes)

 

magic quotes .... 不大懂
SQL injection 注入:在使用者能輸入的地方動手腳,如文字方塊
regular expressions 利用正規表示式檢查變數

Tip 3: 使用mysql_real_escape_string安全的查詢資料庫 (Safely Query Database with mysql_real_escape_string)

[php]function escapeString($post) {
if (phpversion() >= ‘4.3.0’) {
return array_map(‘mysql_real_escape_string’,$post);
} else {
return array_map(‘mysql_escape_string’,$post);
}
}[/php]

Tip 4: 除錯 (Debugging)

[php]//禁用錯誤報告
error_reporting(0);
//報告運行時錯誤
error_reporting(E_ERROR | E_WARNING | E_PARSE);
//報告所有錯誤
error_reporting(E_ALL);
//印出物件、陣列內容
print_r($result); exit;[/php]

Tip 5: 編寫函數和類別 - Writing Functions (and Classes)

Tip 6: 單引號和雙引號 - Single and double quotes

$abc = 1; echo ‘$abc’; //印出$abc echo “$abc”; //印出1 只是單純字串用單引號效率會比較好。

Tip 7: 撰寫風格 - Problems of style 讓寫出來的程式碼更易讀、易除錯。

Tip 8: 三元運算符 - Ternary Operator

讓程式碼精簡、更快(?) echo ( true ? ‘true’ : false ? ‘t’ : ‘f’ );

Tip 9: 安全查詢 - Safe Queries

[php]// returns an array of records
function fetchArray($query=’’)
{
if ($result = safeQuery($query)) {
if (mysql_num_rows($result) > 0) {
while ($arr = mysql_fetch_assoc($result)) $rows[] = $arr;
return $rows;
}
}
return false;
}

// returns a single record
function fetchRecord($query=’’)
{
if ($row = safeQuery($query)) {
if (mysql_num_rows($row) > 0) {
return mysql_fetch_assoc($row);
}
}
return false;
}
Now, with one simple line of code we can perform our query to return our predicted results.
$results = fetchArray("SELECT id,field1 FROM records");

// sample output results
if (!$results) {
echo ‘No results.’;
} else {
// loop the data
foreach ($results as $result) {
echo $result[‘id’] . ‘ ‘ . $result[‘field1’];
}
}[/php]

Tip 10: 成功的策略 - A Strategy for Success

用紙筆規劃好你的想法!

libgdx 遊戲引擎 (Android/desktop game development framework)

更新中。。。

libgdx

下載:http://code.google.com/p/libgdx/downloads/list http://libgdx.l33tlabs.org/
doc: http://libgdx.l33tlabs.org/docs/api/

Texture Packer
材質打包
利用這個演算法排列的。 [http://www.blackpawn.com/texts/lightmaps/default.html](http://www.blackpawn.com/texts/lightmaps/default.html)
![texturepacker.jpg]()![]()
Hiero
字體材質產生器
字體材質產生器,把文本貼到sample text後 下面選glyph cache會把重覆的字只留一筆 ![hiero.jpg]()![]()
Particle Editor
粒子編輯器