数据库更改的密码问题

时间:2016-01-27 08:11:36

标签: php database

我正在更改我的数据库以添加"性别"列和之后,我无法登录我的网站。所以我查看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;
};

4 个答案:

答案 0 :(得分:1)

使用mysql_fetch_assoc代替mysql_fetch_array。它将返回带有列名作为键的键控数组。

答案 1 :(得分:1)

我猜测每个人都会告诉你不再建议使用这些功能,例如你应该切换到PDO之类的东西。

但是,由于您可能需要使用遗留代码维护一些旧应用程序,我猜测我们也可以坚持到底并给出答案。您可以使用mysql_fetch_assoc之类的函数,返回的值将是一个关联数组,因此您可以使用 $ row ['密码'] 而不是 $ row [6] 。还有mysql_fetch_object

再次,当您查看这些手册页时,请注意顶部红色背景上的重要通知。

答案 2 :(得分:1)

mysql_fetch_assoc允许您执行mysql查询并将响应对象用作键[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

答案 3 :(得分:1)

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;