下面是一組與我的問題相關的函數insert_array
函數。在問它之前,是的,我試圖將錯誤輸出,但是在清理完單個小錯誤後,我發現它對我沒有任何回報,爲了您的閱讀便利,我將它清理乾淨。不要嘲笑亂碼(<是業餘的),但我做錯了什麼?我試圖插入一個使用白名單作爲字段名稱的動態數組,然後使用call_user_func_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來查看實際的結果數組是什麼。那裏可能有問題。 – Tularis