我正在尝试散列密码并将其存储在mySql数据库中。使用 localhost 存储时,这很好,现在我已经移动到服务器,哈希方法阻止了整个事情的工作。如果我删除哈希代码,它可以保存得很好,但我希望哈希密码。看起来很奇怪,因为相同的代码在本地工作正常,并且基于 Web 的代码可以很好地连接到 Sql。我已经尝试了各种不同的哈希方法,只要我尝试任何一种,我得到的都是
"2013-10-15 22:37:07.915 用户名和密码与php[20249:a0b] 来自服务器的响应 = "
而不是
"2013-10-1522:54:53.750 用户名和密码与php[21323:a0b] 来自服务器的响应 = 连接已建立已选择数据库"
我正在运行php 5.5.3
提前非常感谢!
这是我的代码
<?php
//session_start()
$host = "";
$user = "";
$pass = "";
$db = "";
$r = mysql_connect($host, $user, $pass);
if (!$r) {
echo "Could not connect to server'n";
trigger_error(mysql_error(), E_USER_ERROR);
} else {
echo "Connection established'n";
}
$r2 = mysql_select_db($db);
if (!$r2) {
echo "Cannot select database'n";
trigger_error(mysql_error(), E_USER_ERROR);
} else {
echo "Database selected'n";
}
$usernameFromApp = $_GET["f1"];
$nameFromApp = $_GET["f2"];
$passwordFromApp = $_GET["f3"];
$timeTarget = 0.2;
$cost = 9;
do {
$cost++;
$start = microtime(true);
password_hash($passwordFromApp, PASSWORD_BCRYPT, ["cost" => $cost]);
$end = microtime(true);
} while (($end - $start) < $timeTarget);
$hash = password_hash($passwordFromApp, PASSWORD_BCRYPT, ["cost" => $cost]);
echo "Appropriate Cost Found: " . $cost . "'n";
echo $hash."'n";
$name = $_GET["f2"];
$username = $_GET["f1"];
$password = $hash;
//$password = $_GET["f3"];
$query = "INSERT INTO user VALUES ('', '$name','$username','$password')";
mysql_query($query) or die (mysql_error("error"));
mysql_close();
?>
你确定你的服务器上也有PHP 5.5吗?您是否与phpinfo()
仔细检查过?
如果是这样,请先删除代码中的while
循环。这是来自手册,我知道代码,但它旨在确定您的服务器在特定时间窗口内可以处理多少成本。在生产中不需要它。将其搁置一次并设置成本(或者干脆坚持使用足够好的默认值)。
检查数据库凭据,创建新文件并首先仅调试数据库连接。似乎这就是您面临的问题。确保设置error_reporting(-1)
和ini_set("display_errors", true)
,这应该确保在出现问题时从脚本获得响应。
另请注意,自 PHP 5.5 以来,mysql
已被弃用,您绝对不应该再使用它,请使用 mysqli
或 PDO
。
验证任何和所有用户输入,永远不要相信任何东西!
对 SQL 使用预准备语句(mysqli
和 PDO
支持)。