И еще после выкладки магазина на сервер столкнулся с проблемой, что часто запросы к БД выдавали ошибку, так как не происходила замена переменных в запросе их значениями.
Ошибка возникала в inсludes\classes\database.php - функция bindReplace:
function bindReplace($place_holder, $value) {
$pos = strpos($this->sql_query, $place_holder);
if ($pos !== false) {
$length = strlen($place_holder);
$character_after_place_holder = substr($this->sql_query, $pos+$length, 1);
if (($character_after_place_holder === false) || preg_match('/[ ,)"]/', $character_after_place_holder)) {
$this->sql_query = substr_replace($this->sql_query, $value, $pos, $length);
}
}
}Вся проблема состоит в проверке условия ($character_after_place_holder === false):
$character_after_place_holder = substr($this->sql_query, $pos+$length, 1);
if (($character_after_place_holder === false) || preg_match('/[ ,)"]/', $character_after_place_holder)) { Если после заменяемой переменной в запросе ничего нету, проверка не срабатывала, хотя по документации, если ничего не найдено substr возвращает false. Соответственно замена переменной не происходила и запрос к БД тоже получался ошибочным.
Проблему обошел, добавив дополнительное условие в if:
$total_length = strlen($this->sql_query);
if (($character_after_place_holder === false) || preg_match('/[ ,)"]/', $character_after_place_holder) || ($pos + $length == $total_length))Может еще кто-то с этим столкнулся, и ему пригодится.
А может кто-то еще сможет объяснить почему ошибка вообще в этом коде могла возникать (при чем не всегда возникала, периодически)? Очень интересно было бы понять.
(Здесь есть изображение, скрытое от гостей. Для просмотра
зарегистрируйтесь или залогиньтесь)