PHP将数组值插入MySQL预处理语句

时间:2014-01-17 19:42:51

标签: php mysql prepared-statement

我有一个值数组,我试图插入到数据库中。目前,下面只插入数组中的第一个键值对,然后返回错误:

Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[HY000]: General       error' in /_/components/php/functions.php:33
Stack trace:
0 /_/components/php/functions.php(33): PDOStatement->fetchAll()
1 /testdb.php(44): Photo\DB\query('INSERT into cat...', Array, Object(PDO))
2 {main} thrown in /_/components/php/functions.php on line 33
functions.php中的

第33行在此函数中

function query($query, $bindings, $conn){
    $stmt = $conn->prepare($query);
    $stmt->execute($bindings);
    $results = $stmt->fetchAll();  <---line 33

    return $results ? $results : false;
}

主要代码是

foreach ($sitecategories as $key => $value) {
    // print "this is key $key and this is value $value";
    if ( $conn ) {
        $catquery=query("INSERT into categories (cat_id, label) VALUES (:catid, :label)",
        array('catid'=>$key, 'label'=>$value), 
        $conn);
    } else {
        print "could not connect to the database";
    }
}

所以我将OK连接到DB(代码中的其他位置),第一个键值对成功插入,但不是数组的其余部分。我猜测我的语法在

中的某处是不正确的
array('catid'=>$key, 'label'=>$value),

但我无法弄明白。任何帮助非常感谢!

2 个答案:

答案 0 :(得分:3)

fetchAll()之后你不应该INSERTINSERT没有结果集。

我刚刚在PDOStatement对象上运行了插入然后调用fetchAll()的测试,并确认这会导致您显示的“常规错误”异常。

$stmt = $dbh->prepare("insert into foo () values ()");
$stmt->execute();
$result = $stmt->fetchAll();

抛出:

PHP Fatal error:  Uncaught exception 'PDOException' with message 
'SQLSTATE[HY000]: General error' in /Users/billkarwin/workspace/PHP/21194489.php:14
Stack trace:
#0 /Users/billkarwin/workspace/PHP/21194489.php(14): PDOStatement->fetchAll()
#1 {main}
  thrown in /Users/billkarwin/workspace/PHP/21194489.php on line 14

答案 1 :(得分:0)

您的值数组不正确。密钥也需要:

array(':catid'=>$key, ':label'=>$value)