1、首先是時間格式的數(shù)據(jù)插入:
如果數(shù)據(jù)庫中數(shù)據(jù)的格式是:datetime,
$currentTime = date('Y-m-d H:i:s');之前是直接插入$currentTIme,無用。需要在插入的數(shù)據(jù)前后加上單引用號,用來和int型的數(shù)據(jù)做區(qū)分。
2、數(shù)組如何轉(zhuǎn)換為字符串
$vegetables[0] = "corn";
$vegetables[1] = "broccoli";
$vegetables[2] = "zucchini";
$text = implode(",", $vegetables);
echo $text;
這樣可以格式化的輸出數(shù)組
3、身份驗證
其余的字段根據(jù)不同的需求去考究,我這里是有兩個字段:
token varchar(32)
timeout int(10) unsigned
token是生成的在timeout時間段內(nèi)有效的令牌,每個api請求都需要通過token進行驗證來保證具有網(wǎng)絡(luò)訪問的權(quán)限,進行校驗的時候,先根據(jù)token查出timeout來,
如果無法找到該token的用戶證明是無效用戶需要重新登錄,如果是有該token但是當(dāng)前時間的time()已經(jīng)大于數(shù)據(jù)庫中的timeout就證明是賬號的token過期,也需要用戶重新登錄
token的生成算法如下:
function genToken( $len = 32, $md5 = true ) {
# Seed random number generator
# Only needed for PHP versions prior to 4.2
mt_srand( (double)microtime()*1000000 );
# Array of characters, adjust as desired
$chars = array(
'Q', '@', '8', 'y', '%', '^', '5', 'Z', '(', 'G', '_', 'O', '`',
'S', '-', 'N', '<', 'D', '{', '}', '[', ']', 'h', ';', 'W', '.',
'/', '|', ':', '1', 'E', 'L', '4', '&', '6', '7', '#', '9', 'a',
'A', 'b', 'B', '~', 'C', 'd', '>', 'e', '2', 'f', 'P', 'g', ')',
'?', 'H', 'i', 'X', 'U', 'J', 'k', 'r', 'l', '3', 't', 'M', 'n',
'=', 'o', '+', 'p', 'F', 'q', '!', 'K', 'R', 's', 'c', 'm', 'T',
'v', 'j', 'u', 'V', 'w', ',', 'x', 'I', '$', 'Y', 'z', '*'
);
# Array indice friendly number of chars;
$numChars = count($chars) - 1; $token = '';
# Create random token at the specified length
for ( $i=0; $i<$len; $i++ )
$token .= $chars[ mt_rand(0, $numChars) ];
# Should token be run through md5?
if ( $md5 ) {
# Number of 32 char chunks
$chunks = ceil( strlen($token) / 32 ); $md5token = '';
# Run each chunk through md5
for ( $i=1; $i<=$chunks; $i++ )
$md5token .= md5( substr($token, $i * 32 - 32, 32) );
# Trim the token
$token = substr($md5token, 0, $len);
} return $token;
}
而timeout入庫的大小可以自己定義:
time()是獲取當(dāng)前時間,如果設(shè)置一周過期的話,那么在用戶Login或者register的時候插入的timeout時間就是:time()+60*60*24*7;
4、require路徑的問題
require這個問題之前一直困擾我很久,我的文件夾是這種情況:
app,dao,exception是平行目錄
app下有user,dao下有core文件夾,文件夾里也有user負責(zé)數(shù)據(jù)庫操作,并且返回user的數(shù)據(jù)結(jié)構(gòu)給app,exception中有自定義的db_exception
這個時候app下的user,引用core里面的user是require_once('../dao/core/user.php');
而core里面的user又相對引用了一個自定義的exception,require_once('../../exception/db_exception');
這個時候我訪問app下的user,php就開始報錯,報錯的地方是core里面對exception的require是有問題的---找不到,我就覺得很奇怪。
后面發(fā)現(xiàn)原因在,當(dāng)你通過app中的user訪問的,當(dāng)前的路徑就是app的路徑,而core中又是相對引用的db_exception,由于當(dāng)前的路徑是app的路徑所以相對路徑就無法找到exception這個文件夾了。解決問題的方法如下:
dirname(__FILE__),通過他獲取當(dāng)前文件夾的絕對路徑,通過這個方式,在app中的user的路徑是app,那么require core中的user,這個時候core中的user的dirname(__FILE__)他的值是dao/core,通過這樣的方式保證文件路徑的決定性,保證了require_once引用的正確性。