Я пытаюсь найти способ запросить mongodb в нечувствительном к регистру способе использования PHP, поскольку в настоящее время при проверке пользователя «Username» и «username» могут быть разными именами пользователей …
$cursor = $collection->findOne(array('username' => /{$_POST['value']}/i)); $lowerInput = strtolower($_POST['value']); $username = strtolower($cursor['username']); if($lowerInput == $username){ echo "That username appears to be in our database!"; }
Я попробовал это, но курсор ищет только совпадение, чувствительное к регистру, поэтому он будет содержать только строковое значение курсора, если оно есть.
Драйвер PHP Mongo имеет внутренний объект Regex:
$cursor = $collection->findOne( array('username' => new MongoRegex("/$_POST['value']/i") );
И btw я настоятельно рекомендую проверить значение $ _POST и, возможно, преобразовать ваше регулярное выражение, чтобы получить только имя пользователя (не более before / after => new MongoRegex('/^' . $securevalue . '$/i')
Изменить: мой ответ не был точным: запуск привязки позволяет mongo использовать индекс по этому запросу, если он доступен.
Поскольку MongoRegex устарел, используйте MongoDB \ BSON \ Regex . Обновленный пример из предыдущего ответа:
$cursor = $collection->findOne( [ 'username' => new \MongoDB\BSON\Regex(preg_quote($_POST['value']), 'i') ] );
Я завернул переменную POST в preg_quote () для дезинфекции возможных вредоносных символов.