0

我正在尝试散列密码并将其存储在 mySql 数据库中。使用 localhost 存储时这很好,现在我已经转移到服务器上,散列方法阻止了整个工作。如果我删除散列码,它保存得很好,但我希望散列密码。看起来很奇怪,因为相同的代码在本地运行良好,并且基于 Web 的代码可以很好地连接到 Sql。我尝试了各种不同的哈希方法,只要我尝试任何我得到的就是

“2013-10-15 22:37:07.915 UsernameAndPasswordwithphp[20249:a0b] 来自服务器的响应 =”

而不是

“2013-10-15 22:54:53.750 UsernameAndPasswordwithphp[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();


?>
4

1 回答 1

0

你确定你的服务器上也有 PHP 5.5 吗?你有仔细检查过phpinfo()吗?

如果是这样,请先删除while代码中的循环。这是来自手册,我知道代码,但它的目的是确定您的服务器在特定时间窗口内可以处理多少成本。你在生产中不需要这个。将其设置一次并设置成本(或者简单地坚持使用足够好的默认值)。

检查您的数据库凭据,创建一个新文件并首先仅调试数据库连接。看来这是您面临的问题。确保设置error_reporting(-1)and ini_set("display_errors", true),这应该确保如果出现问题,您可以从脚本中获得响应。

另请注意,mysql自 PHP 5.5 起已弃用,您绝对不应再使用它,使用mysqlior PDO

验证任何和所有用户输入,永远不要相信任何东西!

为您的 SQL 使用准备好的语句(由mysqli和支持PDO)。

于 2013-10-15T22:21:38.873 回答