Php 使用数组内爆生成插入查询

Php 使用数组内爆生成插入查询,php,mysql,Php,Mysql,我遵循用户注册教程。这就是我试图使用内爆构建查询的内容: if(isset($_POST['submit'])){ $registration_data= array( 'username' => $_POST['username'], 'password' => $_POST['password'],

我遵循用户注册教程。这就是我试图使用内爆构建查询的内容:

if(isset($_POST['submit'])){
                $registration_data= array(
                    'username'      =>   $_POST['username'], 
                    'password'      =>   $_POST['password'], 
                    'password_again' =>   $_POST['password_again'], 
                    'first_name'    =>   $_POST['first_name'], 
                    'last_name'     =>   $_POST['last_name'],
                    'email'         =>   $_POST['email']
                );     

                register_user($registration_data);

        }

function register_user($registration_data){
        global $connect; 
        $data=implode(',', $registration_data).'}';
        $fields= implode(",", array_keys($registration_data));
现在我必须像这样构建查询

$query=INSERT INTO users ($fields) VALUES($data);

//  I want data to be formated like this '{$username}', '{$password}', 
我如何在上面提到的内爆函数中实现它


注意:我只是在学习一些基本教程,因此不必担心PDO/注入等问题。在对所有数据值进行内爆之前,您需要在其周围加上引号:

$data = implode(',', array_map(function($x) {
    return "'" . $x . "'";
}, $registration_data));
$fields = implode(',', array_keys($registration_data));
$query = "INSERT INTO users ($fields) VALUES ($data)";

特别是如果你只是在学习如何做到这一点,你应该从一开始就学会正确地去做

您真的不需要对准备好的语句使用
infrade()
。只需使用
PDO::prepare()
并将数组传递给
PDOStatement::execute
。伪代码大致如下:

$registration_data= array(
    ':username'      =>   $_POST['username'], 
    ':password'      =>   $_POST['password'], 
    ':password_agai' =>   $_POST['password_again'], 
    ':first_name'    =>   $_POST['first_name'], 
    ':last_name'     =>   $_POST['last_name'],
    ':email'         =>   $_POST['email']
);     

$sql='INSERT INTO yourtable VALUES (:username, :password, :password_agai, :first_name, :last_name, :email);';
$qry=$yourpdoconn->prepare($sql);
$qry->execute($registration_data);

请注意,您仍然需要处理您的错误和其他一切,但这就是要点<代码>mysqli*也可以对准备好的语句执行相同的操作,因此您也不一定要使用PDO

那么这个匿名函数将接收数组?我应该也添加这些{}吗?SQL不使用
{}
,所以我不知道您为什么要添加它。请阅读
数组映射
的文档。为数组的每个元素调用匿名函数,并返回一个包含结果的数组。