我正在使用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)
提前致谢。
答案 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攻击。请参阅维基百科文章以了解替代方案......