Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/10.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_Database_Sql Insert - Fatal编程技术网

未为准备语句php中的参数提供数据

未为准备语句php中的参数提供数据,php,database,sql-insert,Php,Database,Sql Insert,帮助,我在连接类中创建了一个方法,该方法连接到本地数据库以插入记录。我允许将参数传递到方法中,以动态选择表、列和值 在这个方法中,我将列和占位符内爆为查询,这很好。我遇到的问题是将值绑定到占位符。我不断收到一个错误,说明“在准备好的语句中没有为参数提供数据”。我在这里搜索了一些相同的问题,但似乎没有一个能解决我的问题。谢谢 public function InsertQuery( $table, $values, $cols) { $placeholders = array();

帮助,我在连接类中创建了一个方法,该方法连接到本地数据库以插入记录。我允许将参数传递到方法中,以动态选择表、列和值

在这个方法中,我将列和占位符内爆为查询,这很好。我遇到的问题是将值绑定到占位符。我不断收到一个错误,说明“在准备好的语句中没有为参数提供数据”。我在这里搜索了一些相同的问题,但似乎没有一个能解决我的问题。谢谢

public function InsertQuery( $table, $values, $cols)
{
    $placeholders = array(); 

    foreach ($values as $val) {
        $placeholders[] = '?';      
    }

    $placeholderList = implode(',', $placeholders);
    $query = "INSERT INTO $table".'('.implode(',',$cols).') VALUES '. '('.$placeholderList.')';
    $connect = $this->dbConnection;

    if ($stmt = $connect->prepare($query)) {
        $param_type = array("ssis"); 
        $params_array = array_merge($param_type,$values);
        call_user_func_array(array($stmt, 'bind_param'), $params_array);
    }
}

您的
$param_type
表明,您已经知道将有多少列(4),但您的函数似乎是“可变的”。如果您的函数没有得到正好4个值,它将失败,因为
ssis
正好用于4个参数

解决方案可能是,查看列并记住,当整数字段出现时,相应地构建
$param_type
字符串。或者,如果存在允许的任何类型的值的组合,那么,您可以得到图片。。。我希望如此