2016-12-22 88 views
1

我創建了一個簡單的php腳本,可從我的I-Phone應用程序中獲取用戶名和密碼的值。我確信它會抓取正確的用戶名和密碼,因爲它會向數據庫插入正確的用戶名和密碼。但是,當我在插入數據庫之前嘗試散列密碼時,它失敗了。未將PHP哈希密鑰插入到數據庫中

腳本在下面。 $查詢語句沒有通過,我不知道爲什麼。 謝謝!

<?php 
    @session_start(); 
    @ob_start(); 

    $host='localhost'; 
    $user='root'; 
    $pass='root'; 
    $db_name="deep_freeze"; 

    $connection = mysqli_connect($host,$user,$pass, $db_name); 

    $username_p = $_POST['username']; 
    $password_p = $_POST['password']; 
    // Hash the password. $hashedPassword will be a 60-character string. 
    $hashPwd = mysql_real_escape_string(password_hash('hello', PASSWORD_DEFAULT)); 

    if(!$connection){ 
     die('Connection Failed'); 
    } 
    else{ 
     $dbconnect = @mysqli_select_db($connection, $db_name); 

     if(!$dbconnect){ 
      die('Could not connect to Database'); 
     } 
     else{ 
      //echo $hashPwd; 
      $query = "INSERT INTO deep_freeze VALUES ('$username_p','$hashPwd')"; 
      mysqli_query($connection, $query) or die(mysql_error()); 

      echo 'Successfully added.'; 
      echo $query; 
      echo $username_p.$password_p; 
     } 
    }  
?> 
+2

您正在使用mysqli進行連接,並使用mysql_real_escape_string作爲轉義字符串。 –

+0

請勿混用mysql_ *和mysqli_ *函數。也不要使用mysql_ *函數。 – Musa

+1

數據庫中的密碼長度是多少?如果你的哈希長度是100個字符,並且在你的數據庫中你已經將字段設置爲'varchar(80)',那麼密碼將被截斷。另外,如上所述,只使用mysqli_ *函數,而不是mysql_ * – AnthonyB

回答

0

在你的代碼說你的散列的長度爲60個字符(根據password_hash方法),所以在數據庫您必須先設置字段中的至少具有60 varchar(60)的長度。

請注意,如果您的數據庫字段長度小於60,您的密碼將在插入時被截斷。

請參閱password_hash文檔。