2011-05-08 21 views
2

使用LDAP搜索和*似乎做工精細用語言,而是用了一些似乎不工作:從我的課(自制)PHP LDAP搜索似乎並沒有被匹配*

調試輸出:

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 

的硬類顯示代碼,因爲它是類的集合,但執行搜索的部分是使用字符串後爲:

EG(這是製造)

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*上的第二個查詢沒有返回結果,但是完整數字的最後一個返回結果嗎?

謝謝,

+0

您的第二個查詢不包含任何」*「字符 – Phil 2011-05-09 02:53:34

回答

0

你可能知道在你的LDAP目錄中,你有一個SCHEMA。已知SCHEMA提供類(類型)和屬性。但事實上,在大多數目錄架構提供了其他兩個功能對於那些屬性:

  1. 由OID generaly給出的屬性的語法被有效地用於匹配屬性
  • 匹配規則

    實施例:

    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}) 
    

    在示例中,匹配規則是平等和SUBSTR是最鏈接至的時間語法(1.3.6.1.4.1.1466.115.121.1.15)。

    您可能會遇到以下的匹配規則:

    EQUALITY 
    ORDERING 
    SUBSTR 
    

    匹配規則SUBSTR是generaly所使用的,當你寫(cn=Peter*)過濾

    所以我的建議是:對你的屬性一看「是PersonID 「在您的SCHEMA和」語法/匹配規則「中將給出您可以應用的過濾器類型