登录时的MYSQL/PHP更新字段
我已经创建了一个登录页面,在db表中有一个名为last_access的字段,用于存储上次登录日期和数据类型为timestamp的时间 下面是select语句登录时的MYSQL/PHP更新字段,php,mysql,Php,Mysql,我已经创建了一个登录页面,在db表中有一个名为last_access的字段,用于存储上次登录日期和数据类型为timestamp的时间 下面是select语句 $sql="SELECT * FROM $tbl_name WHERE $db_usercol='$myusername' and $db_passcol='$mypassword'"; $result=mysql_query($sql); 如何在用户每次登录时更新“last_access”字段?并将该值设置为NOW() 谢谢在登录脚本/
$sql="SELECT * FROM $tbl_name WHERE $db_usercol='$myusername' and $db_passcol='$mypassword'";
$result=mysql_query($sql);
如何在用户每次登录时更新“last_access”字段?并将该值设置为NOW()
谢谢在登录脚本/功能中添加以下内容:
$sql = sprintf("UPDATE %s SET last_access = NOW() WHERE id = %d", $tbl_name, $user_id);
$result = mysql_query($sql);
希望对您有所帮助。成功验证后,您可以执行以下操作:
//get the id after user has logged in then run the update query
mysql_query("UPDATE your_table SET `last_access` = NOW() WHERE id =".$id);
或者你可以用
UPDATE $tbl_name set last_access = NOW() WHERE
$db_usercol='$myusername' AND $db_passcol='$mypassword'
而不是选择,并检查受影响的行数。如果没有->登录失败。如果1->登录成功。如果更多,你就有问题了
但首先应该删除SQL注入漏洞
请检查,您的SQL函数中需要进行一些更改,但它实际上非常易于使用,例如:
$pdo = new PDO("mysql:host=localhost;dbname=yourdbname", 'dbuser', 'dbpass');
$stmt = $pdo->prepare('SELECT * from table where column = :column');
$stmt->bindParam(':column', $column);
$stmt->execute();
$result = $stmt->fetchAll();
这很容易,SQL注入攻击将不成功。如果我尝试使用密码
或“=”登录会发生什么情况
?update语句应该在用户经过身份验证后正确执行如果您想在用户登录时更新它,那么应该在用户登录后执行。这意味着在身份验证之后:)。这只是一种创建字符串的奇怪方式。您可以删除它并使用PHP方式创建字符串:“UPDATE$table\u name SET last\u access=NOW(),其中id=“(int)$user\u id
@Basti为什么这是一种奇怪的创建字符串的方式?为什么不直截了当地说呢?sprintf支持大量类型说明符,这些类型说明符可以帮助您避免不安全脚本的厄运,这些脚本容易受到臭名昭著的SQL注入攻击。他们真的应该在一个共同的基础上使用!有人破坏了你的PHP脚本的安全性,这将是一个相当尴尬的局面。@mark_nsx查看或准备语句,以正确的方式解决SQL注入问题。+1我认为一个关于如何避免SQL注入的简单解释对Jose很有用!:-)
$pdo = new PDO("mysql:host=localhost;dbname=yourdbname", 'dbuser', 'dbpass');
$stmt = $pdo->prepare('SELECT * from table where column = :column');
$stmt->bindParam(':column', $column);
$stmt->execute();
$result = $stmt->fetchAll();