Php PDO语句执行时出现Fatel错误(数组)
我创建了一个可以插入数据库的函数,只需向其中传递两个参数[表名,关联数组“表模式”]。数组包含列名及其值。 首先是数组外观:Php PDO语句执行时出现Fatel错误(数组),php,pdo,Php,Pdo,我创建了一个可以插入数据库的函数,只需向其中传递两个参数[表名,关联数组“表模式”]。数组包含列名及其值。 首先是数组外观: $tableSchema = [ 'member_name' => $member_name, 'member_pass' => $member_pass, 'member_email' => $member_email, 'member_fullname'
$tableSchema = [
'member_name' => $member_name,
'member_pass' => $member_pass,
'member_email' => $member_email,
'member_fullname' => $member_fullname,
'member_image' => $profileImage,
'member_role' => $member_role,
'member_gender' => $member_gender,
'member_phone' => $member_phone,
'member_country' => $member_country,
];
这就是我的功能代码:
function insertInto($table, $columns)
{
// This function to echo parameters at sql stmt
function setParams($columns)
{
$param = '';
foreach($columns as $key => $value) {
$param .= $key . ' = :' . $key . ', ';
}
return trim($param, ',');
}
$array = [];
foreach ($columns as $key => $value) {
array_push($array, $key);
}
global $db_connect;
$stmt = $db_connect->prepare('INSERT INTO '. $table .' SET '. setParams($columns) .'');
$stmt->execute($array); /* Here is my problem */
}
当我尝试运行函数时,会出现以下错误:
致命错误:未捕获异常“PDOException”,消息为“SQLSTATE[HY093]:参数编号无效:C:\xampp\htdocs\blogfive\core\functions\functions.php:87堆栈跟踪:#0 C:\xampp\htdocs\blogfive\core\functions\functions.php(87):PDOStatement->execute(Array)#1 C:\xampp\htdocs\blogfive\dashboard\template\pages\members\insert.member.php(65):insertInto('members',Array)#2 C:\xampp\htdocs\blogfive\dashboard\members.php(32):在第87行的C:\xampp\htdocs\blogfive\core\functions\functions.php中抛出一次('C:\xampp\htdocs\htdocs\htdocs…')#3{main}
$array
是错误的参数名称数组。您需要一个关联数组,其中键是参数名称和值,实际值如下所示:
function insertInto($table, $columns)
{
// This function to echo parameters at sql stmt
function setParams($columns)
{
$param = '';
foreach($columns as $key => $value) {
$param .= $key . ' = :' . $key . ', ';
}
return trim($param, ',');
}
global $db_connect; // Bad practice, try to find an alternative
$stmt = $db_connect->prepare('INSERT INTO '. $table .' SET '. setParams($columns) .'');
$stmt->execute($columns);
}
@我们也可以在INSERT中使用SET。apokryfos anwsers是正确的为什么需要嵌套函数?运行循环并用结果设置字符串同样容易。