【发布时间】:2013-02-13 00:54:34
【问题描述】:
我有这个登录系统:
require_once "conexion.php";
class login extends conexion {
public function log_user($user,$pass)
{
$conexion = mysql_conexion();
$login = "SELECT user_name,user_pass,id FROM menssager_user WHERE user_name='$user' AND user_pass='$pass'";
$e = $conexion->prepare($login);
$e->execute();
$re = $e->fetch(PDO::FETCH_ASSOC);
if($user == $re["user_name"] && $pass == $re["user_pass"])
{
$this->is_online($re["id"]);
return $re["id"];
}
$conexion = null;
} }
当我执行该代码时,需要 1.3 秒才能确定该用户是否存在并且我在数据库中只有 2 个用户名。 谁能告诉我为什么这么慢? 注意:昨天我升级到5.4.7并重新编写代码(针对该版本的新功能)。
更新:
和数据库连接:
class conexion{
public function mysql_conexion(){
$conexion_path = "mysql:dbname=menssager;host:127.0.0.1";
$root = "root";
$pass = "";
try{
$conectar = new PDO($conexion_path,$root,$pass);
$conectar->setAttribute(PDO::ATTR_EMULATE_PREPARES,false);
$conectar->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}catch(PDOException $error)
{
echo $conectar = $error->getMessage();
}
return $conectar;
}
}
【问题讨论】:
-
你有关于 user_name 和 user_pass 字段的索引吗?虽然只有两行,但我仍然对查询如何花费这么长时间感到有些困惑,除非您在该表中有很多其他字段以及大量数据和/或糟糕的硬件设置。另外,为什么还要麻烦返回 user_name 和 user_pass 值并重新验证它们。在您创建准备好的语句和进行比较之间并没有改变。最后,如果你打算使用准备好的语句,你实际上应该使用绑定参数来传递你的数据。
-
它不仅在登录系统中。我也有一个简单的查询,我用它来知道用户是否在线,它也需要 1.2 秒。自从我开始使用扩展 php 以来,我的查询执行速度非常慢。
-
什么是
extends php? -
如果我直接在数据库中查询,只需要0.0004s执行并显示结果。
-
@EinerSantanaR 这很能说明问题,很可能是您在设置连接时的代码存在问题。您可以轻松地使用
microtime()在您的应用程序中添加计时器,以查看实际花费的时间。
标签: php performance