Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/231.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何使用准备好的语句使用不同的数组数据库插入?_Php_Arrays_Mysqli_Prepared Statement - Fatal编程技术网

Php 如何使用准备好的语句使用不同的数组数据库插入?

Php 如何使用准备好的语句使用不同的数组数据库插入?,php,arrays,mysqli,prepared-statement,Php,Arrays,Mysqli,Prepared Statement,下面是一组与我的问题相关的函数,insert\u array函数。在它被问到之前,是的,我试图将其全部错误输出,但是在清除单个小错误后,我发现它没有为我返回任何内容,并且为了便于阅读,我将其清除。不要嘲笑凌乱的代码(

下面是一组与我的问题相关的函数,
insert\u array
函数。在它被问到之前,是的,我试图将其全部错误输出,但是在清除单个小错误后,我发现它没有为我返回任何内容,并且为了便于阅读,我将其清除。不要嘲笑凌乱的代码(<是业余的),但我做错了什么?我试图使用字段名的白名单插入动态数组,然后使用call_user_func_数组作为输入数据的方式。然而,它什么也不做,甚至不会出错

我想我犯了一个小错误,导致一些检查失败。如何正确地将未指定的数组放入数据库

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);
        }
    }
}

你标题中问题的答案是“困难重重”。我怀疑这里的问题与(在该页的一个注释中提到的)有关。该页面上有一些非常有用的评论,建议解决这个问题。我建议你去看看

其中一个建议是尝试以下方法:

$params = array_merge(array($stmt, $type), $inputarray);
$refs = array();
foreach($params as $key => $value) {
    $refs[$key] = &$params[$key]; 
}
call_user_func_array('mysqli_stmt_bind_param', $refs);

我过去使用过类似的方法,它对我很有效。

尝试在合并数组上执行var\u转储,您可以使用call\u user\u func\u array on来查看实际生成的数组是什么。这里面可能有个问题。虽然你的答案确实帮助了我,但实际上是一个放错位置的括号造成了我的问题。