我目前正在尝试构建一个小的通用函数来进行插入。我的目标是传递表,列,值和类型以填充插入。
我唯一的问题是声明:
$stmt -> bind_param($types, $var1, $var2 ...);
我基本上需要的是这样的事情:
$stmt -> bind_param($types, $array);
这就是我现在所得到的:
function insert($into, $columns, $values, $types) {
global $connection;
// Check Correct Length
if(count($columns) != count($values) ||
count($columns) != count($types)) {
return false;
}
$count = count($columns);
$column_string = "";
$value_string = "";
$value_types = "";
for($i = 0; $i < $count; $i++) {
$column_string .= $columns[$i];
$value_types .= $types[$i];
$value_string .= '?';
if($i + 1 < $count) {
$column_string .= ',';
$value_string .= ',';
}
}
$sql = "INSERT INTO $into ($column_string) VALUES ($value_string)";
// Execute Statement
if($stmt = $connection -> prepare($sql)) {
// $stmt -> bind_param("sss", $transaction, $email, $status);
// What to do here?
$stmt -> execute();
$stmt -> close();
}
SQL语句看起来很好。类型已准备就绪 - 我只需要一种动态绑定参数的方法......
答案 0 :(得分:1)
我认为, $ columns 定义为$columns = array('col1', 'col2'/*...*/);
, $ values 定义为$values = array($val1, $val2/*...*/);
我会为列名转义创建函数。
$escapeCols = function($column) {
return sprintf('
%S ', $column);
};
创建的另一个功能?占位符
$placeholders = function ($values) {
return array_fill(0, count($values), '?');
}
您可以准备查询
$sql = sprintf(
'INSERT INTO %s (%s) VALUES (%s)',
$table,
implode(', ', array_map($escapeCols, $columns),
implode(', ', $placeholders($values))
);
然后你可以致电execute
$stmt = $connection->prepare($sql);
$stmt->execute($values);
如果您将 $ values 定义为
,则可以轻松转换此方式 $values = array('col1' => $va1, 'col2' => $val2);