Ошибка php или мой косяк?

Есть код, упрощенный вариант:

$dsn = DbConfig::$dbDriver . ':dbname=' . DbConfig::$dbname . ';host=' . DbConfig::$dbhost;
$dbh = new \PDO($dsn, DbConfig::$dbuser, DbConfig::$dbuserpass, array(
    1002 => 'SET NAMES utf8',
    \PDO::ATTR_PERSISTENT => true,
    \PDO::ATTR_EMULATE_PREPARES => false,
    \PDO::MYSQL_ATTR_USE_BUFFERED_QUERY => true
));
$sqlTxt = "UPDATE `table` SET `value` = :d_value WHERE `id` = :w_id  ";
$dataParams = [':d_value' => $value + 1, ':w_id' => 1];
$sth = $dbh->prepare($sqlTxt);
$sth->execute($dataParams);


$value содержит ответ из select предыдущего запроса к этой же таблице.
print_r($dataParams); выводит
:d_value=>2
:w_id=>1

В базу данных в value записывается 3
При следующем запросе запишет 5

если конструкцию обернуть в if то в базу запишется 2, как и ожидалось. если переменной $value присвоить число 1 то тоже будет ожидаемый результат.
Не понимаю почему так происходит. Бага отрабатывает на centos7 php 7.0.15-7.0.16. на других версиях php бага не работает.
  • Вопрос задан
  • 245 просмотров
Решения вопроса 1
FanatPHP
@FanatPHP
Чебуратор тега РНР
Я думаю, тут мы имеем случай кривого чпу.
Ну и кривой отладки, разумеется: сначала в одном месте записываем что-то в датабазу, а потом через два километра проверяем.
Для проверки запускать этот код через консоль, а не через браузер.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
rishatss
@rishatss
Simple Developer ^)
Если правильно Вас понял, что на одном сервере обрабатывается на ура, на другом падает. То это скорее всего из-за несовместимости версий DB и PHP. Я тоже не мог понять минут 30. Чего это мой проект перестал работать, а оказывается что связка MySQL старого и PHP нового не есть хорошо.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы