繁体   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