#php #ldap
#php #ldap
Вопрос:
Использование LDAP Search и a *, похоже, отлично работает со словами, но с числом, похоже, это не работает:
Отладочный вывод из моего класса (homebrew):
Query: Peter is string
Search for cn=Peter
Search for cn=Peter*
Found: 439
Query: 7565 is number
Search for PersonID=7565
Search for PersonID=7565*
Found: 0
Query: 7565025 is number
Search for
Found: 1
Довольно сложно показать код, поскольку это набор классов, но часть, выполняющая поиск, использует строку после for:
Например (это сфабриковано)
ldap_search($connection, $base, "cn=Peter*", array("dn"));
ldap_search($connection, $base, "PersonID=7565", array("dn"));
ldap_search($connection, $base, "PersonID=7565025", array("dn"));
Знаете ли вы, почему второй запрос на 7565*
не возвращает результатов, но последний запрос на полное число возвращает результаты?
Спасибо,
Комментарии:
1. Ваш второй запрос не содержит никаких
*
символов
Ответ №1:
Вы, вероятно, знаете, что в вашем каталоге LDAP у вас есть СХЕМА. Обычно известно, что СХЕМА предоставляет классы (типы) и атрибуты. Но на самом деле в большинстве каталогов СХЕМА предоставляет две другие функции для атрибутов, которые :
- Синтаксис атрибута, обычно задаваемый OID
- Правила сопоставления, которые эффективно используются для сопоставления атрибута
Пример :
attributeType ( 2.5.4.41 NAME 'name'
DESC 'name(s) associated with the object'
EQUALITY caseIgnoreMatch
SUBSTR caseIgnoreSubstringsMatch
SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{32768} )
В примере правилами соответствия являются EQUALITY и SUBSTR, которые в большинстве случаев связаны с Directory String
синтаксисом (1.3.6.1.4.1.1466.115.121.1.15).
Вы можете столкнуться со следующими правилами соответствия :
EQUALITY
ORDERING
SUBSTR
Правило соответствия SUBSTR
— это то, которое обычно используется при написании (cn=Peter*)
фильтра
Итак, мой совет: посмотрите на свой атрибут «PersonID» в вашей СХЕМЕ, и «правила синтаксиса / сопоставления» предоставят вам тип фильтра, который вы можете применить