[英]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.