Php PDO寄存器用户函数

Php PDO寄存器用户函数,php,mysql,pdo,Php,Mysql,Pdo,因此,经过数小时的调试,我无法找到让代码正常工作的方法。如果有人能帮助我或为我指出正确的方向,我将不胜感激。另外,我该如何保证这部分代码的安全 if (empty($_POST) === false && empty($errors) === true) { $register_data = array( 'username' => $_POST['username'],

因此,经过数小时的调试,我无法找到让代码正常工作的方法。如果有人能帮助我或为我指出正确的方向,我将不胜感激。另外,我该如何保证这部分代码的安全

if (empty($_POST) === false && empty($errors) === true) {
                $register_data = array(
                    'username' => $_POST['username'],
                    'password' => $_POST['password'],
                    'email' => $_POST['email'],
                    'email_code' => md5($_POST['username'] + microtime())
                );
                register_user($db, $register_data);
                header('location: register.php?success');
                exit();
            }
然后是
register\u user
功能

function register_user(PDO $db, $register_data) {
    array_walk($register_data, 'array_sanitize');
    $register_datapw = $register_data['password'];
    require ('blowfish.class.php');
    $bcrypt = new Bcrypt(4);
    $register_datapw = $bcrypt->hash($register_datapw);

    $fields = '`' . implode('`, `', array_keys($register_data)) . '`';
    $data = '\'' . implode('\', \'', $register_data) . '\'';

    $query = "INSERT INTO `users` ($fields) VALUES ($data)";
    $stmt = $db->prepare($query);
    $stmt->execute();   
}
错误~
传递给register_user()的参数1必须是PDO的一个实例,数组给定,在…中调用。

我觉得我把自己挖进了一个找不到出路的洞,我的大脑简直是被炸了,但我一直设法通过错误报告和调试,直到我最终到达顶峰,我被难住了

编辑:


我已经照你说的做了,我相信这是有效的,但现在我要面对这个问题。
mysql\u real\u escape\u string():无法建立到服务器的链接

function array_sanitize(&$item){
$item = htmlentities(strip_tags(mysql_real_escape_string($item)));
}

当您使用PDO准备方法时;尽量不要将值作为字符串传递给查询,而是在运行时绑定或提供它们:

$fields = '`' . implode('`, `', array_keys($register_data)) . '`';
$data = ':' . implode(', :', array_keys($register_data)) . '';

$query = "INSERT INTO `users` ($fields) VALUES ($data)";
stmt = $db->prepare( $query );
$stmt->execute( $register_data );

哪里定义了
$db
?它显然是一个数组,而不是PDO实例。
db=new-PDO(“mysql:host=”.$config['db']['host']”;“dbname=”.$config['db']['dbname'],$config['db']['username'],$config['db']['password'])
在包含的my connect.php中,我将检查您的代码与上面发布的代码片段之间的关系,因为它似乎在某个点被覆盖
var\u dump($db)
在您调用
register\u user()
之前,可能会指示您要查看的位置。我已经按照您所说的做了,并且我相信它工作正常,但现在我的数组大小出现了问题。。我已经用我得到的错误更新了我的问题;您无法访问mysql_*函数。也;你绝对不需要它们,因为PDO会自己处理消毒@user2305310@user2305310简短回答:只需从代码中删除数组walk语句。你根本不需要它。看来这是正确的做法:)再次感谢你。