В настоящее время проблема заключается в том, что следующий запрос SQL находит и возвращает результат при запуске через страницу SQL phpMyAdmin, но не возвращает никаких результатов при запуске через сценарий PHP с использованием PDO.(поскольку не найдено ни одного совпадения)
Проблемный запрос:
SELECT `p_id` FROM `p_desc` WHERE `lang_id` = 1 AND (`p_name` LIKE '%nål%' OR `p_desc` LIKE '%nål%')
Я подозреваю, что это связано как с сопоставлением, так и с использованием используемого набора символов, так как не используетлюбые специальные символы дают ожидаемый результат.
База данных использует параметры сортировки latin1_swedish_ci.Я попытался установить PDO :: MYSQL_ATTR_INIT_COMMAND в "SET NAMES" latin1 'COLLATION' latin1_swedish_ci ', а также попытался использовать utf8 или utf8mb4, сопровождаемый utf8_unicode_ci и т. Д.
Создание PDO:
$dsn = "mysql:host=" . self::$serverHost .
";dbname=" . self::$databaseName .
";charset=" . self::$charset;
$options = [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
PDO::ATTR_EMULATE_PREPARES => false,
PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES \'' . self::$charset . '\' COLLATE \'' . self::$collation . '\'',
];
$connection = new PDO($dsn, self::$username, self::$password, $options);
Где я выполняю запрос:
$conn = Database::getConnection();
$stmt = $conn->prepare('SELECT `p_id` FROM `p_desc` WHERE `lang_id` = ' . $langID . ' AND (`p_name` LIKE \'%' . $searchText . '%\' OR `p_desc` LIKE \'%' . $searchText . '%\')');
$stmt->execute();
$matchingIDs = $stmt->fetchAll();
Как указано выше, выполнение запроса в phpMyAdmin возвращает результаты сопоставления, как и ожидалось, но выполнение запроса в сценарии PHP не возвращает результатов сопоставления.
Сообщения об ошибках не генерируются.
Запросы идентичны.
Имейте в виду, что я новичок в PHP и MySQL и, возможно, что-то сделал неправильно, и любой ввод приветствуется.