2014-01-17 4 views
1

У меня есть массив значений, которые я пытаюсь вставить в базу данных. В настоящее время ниже вставляет только первую ключевую пару значений в массиве, а затем возвращается ошибка:PHP Вставка значений массива в подготовленный MySQL отчет

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 

линия 33 в functions.php находится в этой функции

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 к БД (в другом месте кода), и первая пара значений ключа вставлена ​​успешно, но не остальная часть массива. Я предполагаю, что мой синтаксис некорректен где-то в

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

но я не могу понять это. Любая помощь очень ценится!

ответ

3

Вы не fetchAll() должны после вас INSERT. INSERT не имеет результата.

Я только что проверил тест на вставку, а затем вызвал fetchAll() на объект PDOStatement, и я подтверждаю, что это вызывает вызванное вами исключение «Общая ошибка».

$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 
+0

Большое спасибо! Цените свое время. –

0

Ваш массив значений неверен. Ключи также должны иметь :.

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

Не плохо для парня, который только изучал этот тип кодирования в течение недели или около того. '$ guy =" me ";' ;-) –

+1

Это было правдой в старых версиях PDO, но больше не было. Клавишам не нужен префикс ':'. Это значительно упрощает передачу массива '$ _POST' в качестве параметров запроса без необходимости менять ключи. –

+0

@BillKarwin: [править] –

Смежные вопросы