【发布时间】:2014-02-26 11:08:23
【问题描述】:
下面是一组与我的问题相关的函数,insert_array 函数。在被问到之前,是的,我试图将其全部错误输出,但是在清除了单个小错误后,我发现它对我没有任何回报,为了您的阅读方便,我将其清除了。不要嘲笑凌乱的代码(
我假设我犯了一个小错误,导致某些检查失败。我如何正确地将未指定的数组放入数据库中?
function field_whitelist($funcdb, $field) {
$query = mysqli_query($funcdb,"SELECT `COLUMN_NAME` FROM `INFORMATION_SCHEMA`.`COLUMNS` WHERE `TABLE_SCHEMA`='database1' AND `TABLE_NAME`='table1';");
$whitelist = array();
while ($row = mysqli_fetch_row($query)) {
$whitelist[] = $row[0];
}
if (empty(array_diff($field, $whitelist) === false)) {
return false;
}
return true;
}
function get_array_types($array) {
$rstring = '';
foreach ($array as &$value) {
if (is_int($value)) {
$value = 'i';
} elseif (is_string($value)) {
$value = 's';
}
$rstring = $rstring.$value;
unset($value);
}
return $rstring;
}
function insert_array($inputarray, $funcdb) {
array_walk($inputarray, 'array_sanitize', $funcdb);
$data_array = array();
foreach ($inputarray as &$array_val) {
$data_array[] = '?';
}
$fields = implode(', ', array_keys($inputarray));
$data = implode(', ', $data_array);
$type = get_array_types($inputarray);
if (field_whitelist($funcdb, array_keys($inputarray)) === true) {
if ($stmt = mysqli_prepare($funcdb, "INSERT INTO table1 (".$fields.") VALUES (".$data.")")) {
call_user_func_array('mysqli_stmt_bind_param', array_merge (array($stmt, $type), $inputarray));
mysqli_stmt_execute($stmt);
mysqli_stmt_close($stmt);
}
}
}
【问题讨论】:
-
尝试对使用 call_user_func_array 的合并数组执行 var_dump 以查看实际生成的数组是什么。那里的某个地方可能有问题。
标签: php arrays mysqli prepared-statement