1、首先是时间格式的数据插入:
如果数据库中数据的格式是:datetime,
$currentTime = date('Y-m-d H:i:s');之前是直接插入$currentTIme,无用。需要在插入的数据前后加上单引用号,用来和int型的数据做区分。
2、数组如何转换为字符串
$vegetables[0] = "corn";
$vegetables[1] = "broccoli";
$vegetables[2] = "zucchini";
$text = implode(",", $vegetables);
echo $text;
这样可以格式化的输出数组
3、身份验证
其余的字段根据不同的需求去考究,我这里是有两个字段:
token varchar(32)
timeout int(10) unsigned
token是生成的在timeout时间段内有效的令牌,每个api请求都需要通过token进行验证来保证具有网络访问的权限,进行校验的时候,先根据token查出timeout来,
如果无法找到该token的用户证明是无效用户需要重新登录,如果是有该token但是当前时间的time()已经大于数据库中的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()是获取当前时间,如果设置一周过期的话,那么在用户Login或者register的时候插入的timeout时间就是:time()+60*60*24*7;
4、require路径的问题
require这个问题之前一直困扰我很久,我的文件夹是这种情况:
app,dao,exception是平行目录
app下有user,dao下有core文件夹,文件夹里也有user负责数据库操作,并且返回user的数据结构给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是有问题的---找不到,我就觉得很奇怪。
后面发现原因在,当你通过app中的user访问的,当前的路径就是app的路径,而core中又是相对引用的db_exception,由于当前的路径是app的路径所以相对路径就无法找到exception这个文件夹了。解决问题的方法如下:
dirname(__FILE__),通过他获取当前文件夹的绝对路径,通过这个方式,在app中的user的路径是app,那么require core中的user,这个时候core中的user的dirname(__FILE__)他的值是dao/core,通过这样的方式保证文件路径的决定性,保证了require_once引用的正确性。