2013-02-17 2 views
1

Я делаю прямое обновление базы данных MySQL с использованием параметров привязки PDO. Обновление успешно завершено и оператор печати, расположенный после -> execute(); работает нормально, но когда php пытается выйти, я получаю malloc-ошибку, и процесс php прерывается его родительским процессом.PDO подготовленный оператор ведет к SIGABRT

Код выглядит следующим образом:

<?php 
$edit_type = 'Edit'; 
$employeeID = 1; 
$surname = 'Green'; 
$givenname = 'Frodo'; 
$degree = 'PhD'; 
$title = 'Some_Title'; 
$division = 'Some_Division'; 
$office_phone = 'number'; 
$email = '[email protected]'; 
$room = 'abc-123'; 
$PI_ID = 1; 
$confirmDeactivate = 'Do Not Deactivate'; 


    // Establish a MySQL Connection 

try { 
    $cvbrdbh_update = new PDO("mysql:host={$_SERVER['MYSQL_SERVER']};dbname={$_SERVER['MYSQL_DB']}",$_SERVER['MYSQL_USER'],$_SERVER['MYSQL_PASSWORD'], array(PDO::ATTR_PERSISTENT => true)); 
    $cvbrdbh_update->exec("SET CHARACTER SET utf8"); 
} catch (PDOException $e) { 
    print "Error!: " . $e->getMessage() . "\n" ; 
    die(); 
} 
$cvbrdbh_update->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); 
$cvbrdbh_update->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
if ($employeeID && $edit_type == "Edit") { 
    if (empty($surname)) { 
     print "Warning! The Surname field was empty. Please restart the editing process and be sure to fill in a surname."; 
    } else { 
     $person_update_stmt = $cvbrdbh_update->prepare("UPDATE employees, med_division, titles, pi_emp SET Surname=:surname, GivenName=:givenname, Degree=:degree, Office_Phone=:office_phone, Email=:email, Room=:room, Division=:division, Title=:title, med_division.PI_ID=:pi_id1, pi_emp.PI_ID=:pi_id2 WHERE employees.EmployeeID = '$employeeID' AND med_division.EmployeeID = '$employeeID' AND titles.EmployeeID = '$employeeID' AND pi_emp.EmployeeID = '$employeeID'"); 
     $person_update_stmt->bindValue(':surname',$surname,PDO::PARAM_STR); 
     $person_update_stmt->bindValue(':givenname',$givenname,PDO::PARAM_STR); 
     $person_update_stmt->bindValue(':degree',$degree,PDO::PARAM_STR); 
     $person_update_stmt->bindValue(':office_phone',$office_phone,PDO::PARAM_STR); 
     $person_update_stmt->bindValue(':email',$email,PDO::PARAM_STR); 
     $person_update_stmt->bindValue(':room',$room,PDO::PARAM_STR); 
     $person_update_stmt->bindValue(':division',$division,PDO::PARAM_STR); 
     $person_update_stmt->bindValue(':title',$title,PDO::PARAM_STR); 
     $person_update_stmt->bindValue(':pi_id1',$PI_ID,PDO::PARAM_STR); 
     $person_update_stmt->bindValue(':pi_id2',$PI_ID,PDO::PARAM_STR); 
     $person_update_stmt->execute(); 
     print "Finished" . "\n"; 
    } 
} 
?> 

Исходя из этого, я получаю успешное обновление базы данных, она печатает "Закончено", то следующее сообщение об ошибке:

PHP (12652) таНос : * ошибка для объекта 0x116f07438: указатель освобождения не было выделено * установить контрольную точку в malloc_error_break для отладки

рыбы: Job 1, 'php database_write_probe.php', прерванный сигналом SIGABRT (Abort)

Рыба - это моя раковина. Мой PHP версия:

PHP 5.3.15 с Suhosin-Patch (АОН) (Год постройки: 24 авг 2012 17:45:44) Copyright (с) 1997-2012 РНР Группа Zend v2 Engine. 3,0, Copyright (с) 1998-2012 Zend Technologies

Моя версия MySQL является:

Ver 14,14 Distrib 5.5.27, для osx10.6 (i386) с использованием Readline 5.1

Любая помощь будет принята с благодарностью.

EDIT: Как и в случае с дополнительной точкой данных, кажется, что точным триггером является мое использование «bindValue». Выведение их и просто вставка соответствующих переменных в инструкцию «подготовить» предотвращает крах. Поэтому я предполагаю, что это одно из возможных решений, хотя и с серьезными проблемами безопасности.

+0

Получение такой ошибки означает, что ваша установка php имеет ОСНОВНУЮ проблему. –

+0

Я запускаю OS X 10.8.2, используя встроенную установку PHP. Это известная проблема для установки PHP Apple? – GreenQuestor

ответ

0

Возможно ли, что ваша установка PHP устарела или какая-то временная (не выпускающая) сборка? Это похоже на v аналогично known bug. Посмотрите, можете ли вы обновить или удалить/переустановить PHP.

+0

К сожалению, это стандартное болото Mac OS X 10.8.2 Установка PHP. Я рассмотрю установку обновленной версии. 5.3.15 известно, что это ошибка? – GreenQuestor

+0

Есть, конечно, обновления/обновления доступны. Вы можете попробовать и посмотреть, лучше ли это. – ethrbunny

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