使用PHP进行MYSQL慢查询

时间:2010-08-13 14:07:37

标签: php mysql session

我正在使用mysql和php在我的网站上注册。注册还可以。 Mysql立即进行查询。但在登录时,奇怪的事情开始发生。我在我的PHP代码中插入测试以将测试行插入数据库。第一个测试代码立即插入,但仅在10分钟之后,在一系列刷新和重新执行操作后插入第二个测试代码。第三次测试查询是相同的 - 在第二次查询后大约10分钟后。

这是登录代码:

<?php
session_start();
if(isset($_SESSION['id'])){
        echo 'You have logged in.';
        echo $_SESSION['id'];
    } 
  else {    
        $email=$_POST['email'];
        $password=$_POST['password'];
        $db=new mysqli('','','','');  
        if (mysqli_connect_errno()) {
            echo 'Unable to connect to database: '.mysqli_connect_error().'. Please e-  mail our system administrator. We will fix this error as soon as possible. Thanks for patience and understanding. ';
            exit();
        }
//TEST QUERY
            $query="insert into test values(3, 'test')";
            $result=$db->query($query);
//LOGIN QUERY
        $query="select id from users where email='$email' and password='$password'";   
        $result=$db->query($query);   
        if ($result->num_rows==0) {
            echo 'Incorrect email or password.';               
        }  
        else {
            $row=$result->fetch_assoc();
            $_SESSION['id']=$row['id'];
            echo 'You have logged in.';
            echo $_SESSION['id'];
//THIS TEST QUERY IS NOT IMPLEMENTED
            $query="insert into test values(1, test)";
            $result=$db->query($query);
        }  
        }   
?>

哪里出错?

测试表由2列组成:id(中int,主键,unsigned)和test(text)

提前致谢。

4 个答案:

答案 0 :(得分:1)

听起来像饼干可能会在10分钟后过期。运行echo session_cache_expire();以查看您的到期时间设置为何。更多详情请见http://php.net/manual/en/ref.session.php

答案 1 :(得分:1)

这看起来很可疑。

$query="insert into test values(3, 'test')";

是否尝试将每行插入的ID设置为3? ID必须是独一无二的。

修改

这可能无法解决您的问题,但不会强迫您每次手动更改ID,这会让您的生活更轻松。

INSERT INTO test SET <colname>='test'

其中<colname>是“test”进入的列的名称。

答案 2 :(得分:1)

insert into test values(1, test)

- test - 需要引号,否则您将收到列测试不存在的错误(除非确实如此)。如果它确实存在,它可能会是空的,因为mysql可能不知道你的意思是测试 - 也许你的版本认为它是常数或其他东西。

如果您发布了测试表的表结构,那可能有助于解决它。

答案 3 :(得分:1)

只是一点安全提示:您的SQL查询非常危险,因为它们容易发生SQL injection攻击。请参阅维基百科文章以了解替代方案......