作者stOOrz6 (stOOrz)
看板PHP
标题[心得] PHP 程式设计必知重点
时间Wed Feb 14 11:23:22 2007
※ [本文转录自 Programming 看板]
作者: stOOrz6 (stOOrz) 看板: Programming
标题: [心得] PHP 程式设计必知重点
时间: Wed Feb 14 11:22:57 2007
网页版:
http://blog.stoorz.org/archives/2007/02/14/49/
下面这两个网页提供了十个 PHP 程式设计的提示,一篇文章各五个,总共加起
来十个。看起来标题好像不太一样?不用怀疑,其实这是同一个系列的文章,第
一篇是 Tip 1 到 Tip 5,第二篇是 Tip 6 到 Tip 10。
- 10 Tips That Every PHP Newbie Should Know
http://www.phpbuilder.com/columns/vaska20050722.php3?aid=948
- 10 Tips That Every PHP Developer Should Know, Part 2
http://www.phpbuilder.com/columns/vaska20050812.php3
对我比较有用大概有下面几个 Tips
Tip 1: 使用 MySQL Connection Class
也就是把 MySQL 一开始要 initialization 的 method 写成 class
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);
}
}
放在公用的函式库里面,未来可以重复使用,每次要用的时候只要 new 一
个新的 DB object 出来
// calls it to action
$db = new $DB;
这样就可以省略一开始资料库起始化的步骤。
Tip 3: 查询 database 之前要先处理 query string
为了要避免 SQL Injection,呼叫 mysql_query() 之前要先将 special
characters 作 escape 处理,也就是帮 special characters 加上 slash。
function escapeString($post) {
if (phpversion() >= ‘4.3.0′) {
return array_map(’mysql_real_escape_string’,$post);
} else {
return array_map(’mysql_escape_string’,$post);
}
}
Tip 6: 双引号和单引号的分别
简单来说就是,双引号里面的变数会被解译,单引号里面的变数不会被解译
,也就是说 PHP 会 parse 双引号里面的字串。如果引号内只是单纯的字串
,用单引号会比较快。
Tip 9: 安全地查询资料库
如果利用 mysql_query() 查询资料库这里的 code 没有写好,PHP 预设会
把错误讯息列印到使用者的浏览器,这会造成不可预期的资讯外泄,让有心
人士或是骇客利用这些资讯来攻击你的网站。所以可以写 wrap functions
来取代原来的 mysql_query() 和 mysql_num_rows()。
function safeQuery($query=”)
{
global $db;
if (!$query) return false;
return mysql_query($query, $db->link);
}
// 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;
}
用这三个函式来安全地存取资料库,另外可以把这三个函式放到公用函式库
,让程式码可以重复使用。
网页版:
http://blog.stoorz.org/archives/2007/02/14/49/
--
stOOrz
http://blog.stoorz.org/
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 220.135.17.40
--
stOOrz
http://blog.stoorz.org/
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 220.135.17.40
1F:推 yuan0258:应该是$db = new DB;不是$db = new $DB; 02/15 00:15
2F:推 KiroKu:你网页怪怪的 02/16 12:03
3F:推 smile0052:加油 02/17 20:29