簡體   English   中英

數據庫更改的密碼問題

[英]password issue with database change

我正在更改數據庫以添加“性別”列,之后,我無法登錄我的網站。 因此,我研究了get_passwd()函數,發現$passwd = $row[5]引起了問題。

我已修復它,但是即使將列添加到數據庫中,還有更好的方法來執行此功能嗎?

function get_passwd($link, $login) {
    $sql = "SELECT * FROM user WHERE email='$login'"; 
    $result = mysql_query($sql, $link);
    $row = mysql_fetch_array($result);
    $passwd = $row[6];//this is the problem! 
    //echo $passwd;
    return $passwd;
};

使用mysql_fetch_assoc代替mysql_fetch_array。 它將返回帶有列名作為鍵的鍵控數組。

我猜想每個人都會告訴您,不再建議使用這些功能,例如,應該切換到PDO之類的東西。

但是由於您可能需要使用遺留代碼維護某些舊應用程序,所以我猜測我們也可以保持關注並給出答案。 您可以使用類似mysql_fetch_assoc的函數,返回的值將是一個關聯數組,因此您可以使用$ row ['password']而不是$ row [6] 還有mysql_fetch_object

同樣,當您查看這些手冊頁時,請注意頂部紅色背景上的注意事項。

mysql_fetch_assoc允許您執行mysql查詢並將響應對象用作key [value]數組。

function get_passwd($link, $login){
   $sql="SELECT * FROM user WHERE email='$login'"; 
   $result=mysql_query($sql, $link);
   $row=mysql_fetch_assoc($result);
   $passwd = $row['password']; <- use the column name here
   //echo $passwd;
   return $passwd;
};

在下面的文檔頁面中找到更多信息:

http://php.net/manual/en/function.mysql-fetch-assoc.php

您不贊成使用MYSQL函數。 您應該擔心MYSQL注入


...但是這是使MYSQL世界更加安全的一種方法...


PDO- http://php.net/manual/de/book.pdo.php

例:

$db = new PDO("mysql:host=$db_host;dbname=$db_name;charset=utf8", "$db_user", "$db_pass");
$query = $db->prepare("SELECT username, password FROM user WHERE email = ? LIMIT 1");
// you should know which columns you are selecting
// LIMIT to make sure you don't select 2 rows.
$query->execute(array($login));
$row = $query->fetch();
echo $row["password"];
//return $row["password"];
$db = null;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM