PDA

Просмотр полной версии : Не обновляет базу в MySQL


GregoryR
20.08.2010, 09:42
Столкнулся с такой вот проблемой:
Есть Flex4, он соединяется посредством php (и Zend) с MySQL. Чтение базы происходит корректно, а вот операции с изменением данных нет, т.е. попытка удалить запись выполняется без ошибок (правда мы не получаем событие ответа от респондера), но данные не изменяются.

Самое интересное, что в режиме "Тестовая операция" данные в MySQL изменяются! В режиме же запуска из AS3 - нет.

Вот пример AS3 обработчика отправки данных по нажатию кнопки:


var vehicles:Vehicles = new Vehicles();
vehicles.id_userowner = parseInt(id_userownerTextInput.text);
vehicles.name = nameTextInput.text;
vehicles.registration_number= registrationNumber.text;

createVehiclesResult.token = vehiclesService.createVehicles(vehicles);


Есть так же теги:
<valueObjects:Vehicles id="vehicles"/>
<s:CallResponder id="createVehiclesResult" result="createVehiclesResult_resultHandler(event)"/>

но функция "createVehiclesResult_resultHandler" так и не вызывается.


Особая засада с тем, что тестовая операция создания записи с подключенным сервисом и следующими входными данными
{
name:Mersedes,
id_userowner:5,
registration_number:x545x96
}

срабатывает перкрасно и запись в MySQL базе данных появляется, а вот из AS3 - нет.

----

Буду рад за любые идеи и советы. Спасибо.


--------------------------------------------------------------------------------------------------
UDP: решение найдено
Похоже это внутренний глюк Flash Builder 4.

Решается изменением типов функции и переменных:

Было

public function createUsers(item:valueObjects.Users) : mx.data.ItemReference
{
var _internal_operation:mx.rpc.AbstractOperation = _serviceControl.getOperation("createUsers");
var _internal_token:mx.data.ItemReference = _internal_operation.send(item) as mx.data.ItemReference;

return _internal_token;
}


Стало

public function createUsers(item:valueObjects.Users) : mx.rpc.AsyncToken
{
var _internal_operation:mx.rpc.AbstractOperation = _serviceControl.getOperation("createUsers");
var _internal_token:mx.rpc.AsyncToken = _internal_operation.send(item) as mx.rpc.AsyncToken;

return _internal_token;
}


Кроме того выявлен еще один баг, функция удаления записей то же не работала.

Решается так: ищем файл php с описанием сервиса, в нем в изменяем наименование функции вида
public function delete<table> (например deleteUsers)

на
public function delete<table>_test (например deleteUsers_test)

после этого меняем название в AS-файле вида _Super_<table>Service (например _Super_UsersSerivice)
в строке
var _internal_operation:mx.rpc.AbstractOperation = _serviceControl.getOperation("deleteUsers");
на
var _internal_operation:mx.rpc.AbstractOperation = _serviceControl.getOperation("deleteUsers_test");
функции public function delete<table>(itemID:Object) : mx.rpc.AsyncToken

после этого всё начинает работать как надо, потом можно поменять названия функций на исходные, но все продолжит работать корректно.

--------------------------------------------------------------------------------------------------