gpt4 book ai didi

php - PDO 使用键作为列名插入数组

转载 作者:行者123 更新时间:2023-11-29 03:50:09 25 4
gpt4 key购买 nike

我将我的 PHP 数组的 $_POST 内容插入到带有 PDO 的表中。我正在查看以下代码行,我有过这样的时刻之一:“必须有更好的方法来做到这一点”。如果键名与表中的列名匹配,是否有更简单的方法将其全部插入?

代码示例:

$statement = $db->prepare("INSERT INTO `applications`(`username`, `email`, `password`, `name`) VALUES (?,?,?,?)");

$statement->execute(array($_POST['username'], $_POST['email'],$_POST['password'],$_POST['name']));

此代码有效,但它似乎有点过头(尤其是添加了越来越多的列)。

最佳答案

我会这样做:

首先声明列。我们将使用这些来提取 $_POST 的子集以用作列。否则,用户可能会传递与表中任何列都不匹配的虚假请求参数,这会破坏我们的 SQL。

$columns = array('username','email','password','name');
$column_list = join(',', $columns);

创建命名参数占位符,即 :username

$param_list = join(',', array_map(function($col) { return ":$col"; }, $columns));

单独形成SQL,因为如果它在自己的变量中更容易阅读和调试。

$sql = "INSERT INTO `applications` ($column_list) VALUES ($param_list)";

始终检查从 prepare()execute() 返回的错误状态。

$statement = $db->prepare($sql);
if ($statement === false) {
die(print_r($db->errorInfo(), true));
}

这里我们 $_POST 的字段匹配我们要插入的列。

$param_values = array_intersect_key($_POST, array_flip($columns));

并将该数组传递给 execute()。再次检查错误返回状态。

$status = $statement->execute($param_values);
if ($status === false) {
die(print_r($statement->errorInfo(), true));
}

关于php - PDO 使用键作为列名插入数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13545170/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com