我有一些PHP会话测试代码 - 以确保登录用户有效。
我只是解释一些函数:is_logged_in
只是检查是否设置了一些会话变量并且test_duplicate
连接到数据库以检查是否有一行的列等于该值
function check_account(){
if(is_logged_in()){
// Destroy session if the user doesn't exist.
if(test_duplicate("username", $_SESSION["user"])){
session_destroy();
}
}
if($_SESSION["valid_day"] != date("Ymd")){
// Destroy session if the key has expired
session_destroy();
}
}
function test_duplicate($field, $value){
$mysqli = database_connect();
$statement = $mysqli->prepare("SELECT * FROM users WHERE " . $field . " = ?");
$statement->bind_param("s", $value);
$statement->execute();
$statement->store_result();
$rows = $statement->num_rows;
if($rows > 0){
return FALSE;
}
return TRUE;
}
function database_connect(){
if(!isset($dbconnection)){
$config = get_configuration();
// Create connection
$mysqli = new mysqli($config["hostname"], $config["username"], $config["password"], $config["database"]);
if($mysqli->connect_error){
die("<h1>Error 1 :: Critical backend failure</h1>");
}
if(!check_tables($mysqli)){
die("<h1>Error 2 :: Critical backend failure</h1>");
}
$dbconnection = $mysqli;
return $mysqli;
}else{
return $dbconnection;
}
}
问题:
test_duplicate
功能大约需要3-4秒才能完成我目前的解决方案(我不认为这些特别好):
答案 0 :(得分:2)
我建议:
def seq(n):
return reduce(lambda x,y: 10*x+y, [1]*n)**2/10**(n-1)
函数中每行代码所需的时间。test_duplicate
的所有字段,而是返回单个整数值。更好的是,它不是将它作为一个行返回查询,而是将它作为一个返回单个值的标量查询。<强>更新强>
如果select *
中有一个具有指定值的行,则返回1;如果不存在匹配的行,则为0;
username