当前位置:  开发笔记 > 编程语言 > 正文

如何使用PDO连接MySQLi数据库?

如何解决《如何使用PDO连接MySQLi数据库?》经验,为你挑选了1个好方法。

我正在创建一个登录表单,但我没有成功登录时遇到问题.我的表单看起来像这样

我已经检查过,我正在连接数据库,我的uname和pass都是正确的.我经过多次双重检查.问题在我的查询中.这是loginProcess.php文件


在Fred-ii的帮助下,我能够找出错误并真正快速解决登录问题!我想提供我用来登录的代码,以防其他人遇到这个问题.

这是我用来登录的代码.我觉得我可以使用execute和$ userSql/$ pwSql减少冗余.任何建议清理这一点将不胜感激!

prepare($userSql);
$getUser->execute(array(
    ':uname' => $uname
));


if($getUser->rowCount()){    
    $pwSql = "SELECT pass FROM staff WHERE uname =:uname";
    $getPw = $conn->prepare($pwSql);
    $getPw->execute(array(
        ':uname' => $uname
    ));
    $pw = implode($getPw->fetch(PDO::FETCH_ASSOC));

    if(password_verify($pass,$pw)){
        header("Location: ../../staffHome.php");
    }else{
        echo "Oops! You have entered in an incorrect password!";
    }

}else{
    echo "Oops! That user doesn't exist!";
}
?>

Funk Forty N.. 5

这是独家新闻.

您的条件语句if(isset($_POST['login'])){...}永远不会发生,因为表单不包含name属性(除非您使用JS/jQuery).您需要为提交命名. 因为PHP不依赖于"id",所以它依赖于"name"属性(或者,如果你使用的是JS/jQuery,那么也是如此,但这不是这里的情况).然后从中删除 .name="login"

然后你没有将连接传递给你的转义函数.

然后你混合的mysql_功能是不与其他任何东西混合,mysql_.

我们也不知道您使用哪个MySQL API进行连接.

因此,使用相同的连接到查询,使用mysqli_或PDO,最好使用预准备语句.

编辑:来自OP的评论:"我正在使用PDO进行连接."

您必须使用相同的连接到查询.你不能混合mysql_mysqli_与PDO 混合.

请教:

我可以在PHP中混合MySQL API吗?

http://php.net/manual/en/mysqli.real-escape-string.php

http://php.net/manual/en/mysqli-result.num-rows.php

http://php.net/manual/en/mysqli.error.php

http://php.net/manual/en/function.mysqli-connect.php

PDO错误处理http://php.net/manual/en/pdo.error-handling.php

错误报告添加到文件的顶部,这将有助于查找错误.



旁注:显示错误只能在分段中完成,而不能在生产中完成.


密码

我还注意到您可能以纯文本格式存储密码.不建议这样做.

使用以下之一:

crypt_blowfish的

crypt()

bcrypt()

scrypt()

在OPENWALL

PBKDF2

PHP.net上的PBKDF2

PHP 5.5的password_hash()功能.

兼容包(如果PHP <5.5)https://github.com/ircmaxell/password_compat/

其他链接:

PBKDF2对于PHP


您现在的代码对SQL注入是开放的.使用mysqli_*预处理语句,或PDO预处理语句.



1> Funk Forty N..:

这是独家新闻.

您的条件语句if(isset($_POST['login'])){...}永远不会发生,因为表单不包含name属性(除非您使用JS/jQuery).您需要为提交命名. 因为PHP不依赖于"id",所以它依赖于"name"属性(或者,如果你使用的是JS/jQuery,那么也是如此,但这不是这里的情况).然后从中删除 .name="login"

然后你没有将连接传递给你的转义函数.

然后你混合的mysql_功能是不与其他任何东西混合,mysql_.

我们也不知道您使用哪个MySQL API进行连接.

因此,使用相同的连接到查询,使用mysqli_或PDO,最好使用预准备语句.

编辑:来自OP的评论:"我正在使用PDO进行连接."

您必须使用相同的连接到查询.你不能混合mysql_mysqli_与PDO 混合.

请教:

我可以在PHP中混合MySQL API吗?

http://php.net/manual/en/mysqli.real-escape-string.php

http://php.net/manual/en/mysqli-result.num-rows.php

http://php.net/manual/en/mysqli.error.php

http://php.net/manual/en/function.mysqli-connect.php

PDO错误处理http://php.net/manual/en/pdo.error-handling.php

错误报告添加到文件的顶部,这将有助于查找错误.



旁注:显示错误只能在分段中完成,而不能在生产中完成.


密码

我还注意到您可能以纯文本格式存储密码.不建议这样做.

使用以下之一:

crypt_blowfish的

crypt()

bcrypt()

scrypt()

在OPENWALL

PBKDF2

PHP.net上的PBKDF2

PHP 5.5的password_hash()功能.

兼容包(如果PHP <5.5)https://github.com/ircmaxell/password_compat/

其他链接:

PBKDF2对于PHP


您现在的代码对SQL注入是开放的.使用mysqli_*预处理语句,或PDO预处理语句.

推荐阅读
ar_wen2402851455
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有