Поздавьте меня, я набыдлокодил до нетривиальной ошибки.
Когда я пытаюсь добавить записи в таблицу, запрос никаких ошибок не возвращает, однако в базе данных записи отсутствуют. Но так бывает не со всеми INSERT'ами — на некоторых страницах INSERT'ы работают. Также, если в PHPMyAdmin принудительно ввести любой запрос, он выполнится без нареканий. Запросы выборки работают. Проблема в PHP.
//... класс ответственный за запросы к БД ...
public function testInsertion ( ) {
if ($this->link) {
$stmt = $this->prepareStatement('isrtPrdct', "INSERT INTO `test` (`entry`) VALUES ('test');#");
if ($stmt->execute( )) {
printf('Success.');
} else {
printf('Failure.');
}
} else {
printf('Failure.');
}
}
public function checkInsertion ( ) {
if ($this->link) {
$stmt = $this->prepareStatement('checkIsrt', "SELECT * FROM `test` WHERE `entry`='test';#");
if ($stmt->execute( )) {
$stmt->bind_result($result);
do {
printf('result: \''.$result.'\'');
} while ($stmt->fetch( ));
} else {
printf('Failure.');
}
} else {
printf('Failure.');
}
}
//...
Если на одной странице выполнить обе функции, то они вернут 'Success' и 'result: 'test'' соответсвенно. Если функции будут вызваны на разных страницах, то checkInsertion вернёт пустую строку, т. к. в БД ничего не добавляется (хотя по задумке должно).
Я так себе думаю, что проблема в подключении к БД, в закрытии подготовленных запросов или чём-то в подобном. Конечно, я пробовал и непараметизированные запросы $mysqli->query($sql).
Что на Denver'е, что на сервере проблема одинаковая.
В сети встречаются подобные вопросы , но внятного решения я не отыскал. Большинство пишет, что проблема решилась сама собой.
Принятый ответ
В общем вижу 2 причины. Это либо ты открываешь соединение не с основной базой, а какой нибудь внутренней и он все данные пишет в память (поэтому на одной странице и работает). Либо что-то типа отложенной записи. Возможно надо просто подтвердить изменения с помощью commit. Например, на оракле можно делать подтверждение и откат изменений.
`
ОЖИДАНИЕ РЕКЛАМЫ...
Чтобы оставить комментарий, пожалуйста, войдите на сайт.
Скрипт, когда пхп его начинает выполнять, ничего о других скриптах не знает.
Ред. Zahanc
Ред. Mihahail
По сабжу, да, во-первых, надо закрывать соединение(хотя само должно), во вторых, может кеширование?