我的PDO批量插入准备好的查询不';无法工作,未显示错误(PHP+;PDO+;MySQL)

我的PDO批量插入准备好的查询不';无法工作,未显示错误(PHP+;PDO+;MySQL),php,mysql,pdo,prepared-statement,bulkinsert,Php,Mysql,Pdo,Prepared Statement,Bulkinsert,我试图使用一个准备好的语句插入多行,但无法使其正常工作 我创建了以下帮助器方法: // generate "(?, ?, ?, ?), (?, ?, ?, ?)" from cols and values // to be used in a prepared statement public function placeholders ($values, $cols) { $row = '('.implode(',', array_fill(0, count($cols), '?'))

我试图使用一个准备好的语句插入多行,但无法使其正常工作

我创建了以下帮助器方法:

// generate "(?, ?, ?, ?), (?, ?, ?, ?)" from cols and values
// to be used in a prepared statement
public function placeholders ($values, $cols) {
    $row = '('.implode(',', array_fill(0, count($cols), '?')).')';
    $place_holders = array_fill(0, count($values)/count($cols), $row);
    return implode(',', $place_holders);
}

// generate the "?" placeholders and make the PDO transaction
protected function insertInto ($table, array $cols, array $values) {
    $query = 'INSERT INTO `'.$table.'` (`'.implode('`,`', $cols).'`) VALUES '.$this->placeholders($values, $cols);
    return $this->makeTransaction($query, $values);
}

// prepare and execute a PDO transaction
protected function makeTransaction ($query, array $values=array()) {
    $this->pdo->beginTransaction();
    $q = $this->pdo->prepare($query);
    $q->execute($values);
    return $this->pdo->commit();
}
至于呼叫本身,这里是:

$this->insertInto('table', array('f_key', 'c2', 'c3'), $values);
我正在使用以下$values数组:

$values = array(1, 'a', 'b', 2, 'c', 'd', ...);

现在数据没有进入表中,但同时我没有得到任何异常或任何类型的错误。我在调用后尝试了
var_dump
ing
$this->pdo->errorInfo()
,但它也没有包含错误。有什么想法吗?

您能确保PDO准备的语句模拟已关闭吗?这可能是个问题。我添加了
$this->pdo->setAttribute(pdo::ATTR\u EMULATE\u PREPARES,false)现在我得到了这个致命错误:致命错误:对中的非对象调用成员函数execute()。。。该行是
$q->execute($values)的行替换变量后,您是否可以打印查询语句?您通常会发现问题是显而易见的。下面是生成的SQL:插入
f_key
c1
c2
c3
)值(?,,,,,,,,(,,,,,?),。。。然而,我不知道如何得到原始的、替换的查询。除了
$q->debugDumpParams(),在文档中找不到任何内容这太可怕了