在散列它们并将它们存储在我的数据库中之前,我应该如何逃避或清除用户提供的密码?
当PHP开发人员考虑出于安全目的而考虑哈希用户的密码时,他们往往会像对待任何其他用户提供的数据一样考虑这些密码.这个主题经常出现在与密码存储相关的PHP问题中; 开发人员经常希望使用诸如escape_string()(在各种迭代中)等功能清理密码htmlspecialchars(),addslashes()然后再对其进行散列并将其存储在数据库中.
我有一个奇怪的问题,PDO在插入重复值时不会抛出异常.在这种情况下,我确实预计会出错.
相关代码:
try
{
$db_conn = new PDO("mysql:host=".$config["database"]["hostname"].";charset=utf8", $config["database"]["username"], $config["database"]["password"], []);
$db_conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$db_conn->exec(file_get_contents("some_file_with_data.sql");
}
catch(Exception $e)
{
// PDOException extends RuntimeException extends Exception so exceptions should be catched here
// however for the duplicate key entry it will not throw an exception
}
Run Code Online (Sandbox Code Playgroud)
带有SQL数据的文件包含多个这样的插入:
INSERT INTO `a` (`b`, `c`) VALUES
(1, 1),
(2, 2),
(3, 2);
INSERT INTO `a` (`b`, `c`) VALUES
(1, 1);
Run Code Online (Sandbox Code Playgroud)
b表中的字段a设置为主键.当我使用phpMyAdmin在完全相同的结构中插入完全相同的数据时,我收到此错误:#1062 - Duplicate entry '65533' for key 'PRIMARY'
为什么PDO在这种情况下不会抛出错误?即使我将错误模式设置为异常?
编辑:这是用于此特定表的表结构
CREATE …Run Code Online (Sandbox Code Playgroud)