Запросы PDO не возвращают все результаты с помощью дефиса

настройка

У меня есть веб-сайт, который считывает местоположение с URL-адреса и запускает запрос базы данных в этом месте. Для большинства мест это не вызывает проблемы, однако есть несколько мест, поиск которых не выполняется. Эти местоположения содержат один или несколько дефисов в названии местоположения, но гораздо больше таких мест с дефисом, который работает.

изучение

Исследуя проблему, я нашел что-то очень удивительное, во-первых, если я выполнил запрос, выполняемый из командной строки или менеджера sqlite, запрос вернет правильную строку, но если я запустил запрос через PDO, он не вернет никаких результатов. Даже если бы я выполнил подобный запрос с LIKE 'w%', он все равно не смог бы вернуть строку с правильным значением (хотя было бы возвращено несколько других строк.

Код

$db = new PDO($connectionString);
$query = "SELECT name, page FROM stations WHERE page = 'warragul-(nilma-north)'";
$sql = $db->prepare($query);
if (!$sql) {
 $error = $db->errorInfo();
 throw new Exception($error[2], $error[1]);
}
$sql->execute();
$result = $sql->fetchAll();

Что я пробовал

Я пробовал некоторые основные вещи, такие как использование разных котировок, связанных параметров. Во-вторых, я попробовал посмотреть шестнадцатеричные значения в моей php и базе данных, но вернуть то же значение: 77 61 72 72 61 67 75 6C 2D 28 6E 69 6C 6D 61 2D 6E 6F 72 74 68 29. Где 2D - значение тире. Я проверил это двумерное значение на другую строку, у которой не было этой проблемы, и она также использовала 2D раньше. Я расширил свой поиск и нашел еще несколько строк, которые не вернули бы значение с любым текстовым поиском в поле страницы, например: banana-bank larapuna- (eddystone-point) port-kembla-habour Я не смог найти ни одного шаблона между ними, кроме дефисов. Некоторые примеры, которые сработали: julia-creek mount-nowa-nowa st-kilda-harbor-rmys

Что мне нужно

В идеале я хотел бы понять проблему и ее причину. Но я соглашусь на любое решение, которое останавливает это поведение и возвращает строку с результатами.

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

EDIT: Я попытался выполнить ту же логику с библиотекой SQLite3, которая имеет такое же поведение.

EDIT: допущения, сделанные для этого вопроса, были неправильными, и PDO подключался к неправильной базе данных, вызывая эту проблему. См. Ответ ниже.

1 ответ

Извините, этот вопрос был основан на ошибочных предположениях.

Принятая строка соединения ссылалась на более раннюю версию базы данных, достаточно похожую на то, что большинство местоположений не были затронуты, но не полностью идентичны, что вызвало проблему для некоторых местоположений. Исправлена ошибка, связанная с тем, что значение передаваемой строки подключения исправлено.

licensed under cc by-sa 3.0 with attribution.