[英]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;
};
在下面的文檔頁面中找到更多信息:
您不贊成使用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.