Note that you can sometimes get more detailed error messages by getting the value of the LDAP_OPT_DIAGNOSTIC_MESSAGE option.
For example, after a recent connection error the two gave very different info:
<?php
$conn = ldap_connect($server);
ldap_search($conn, $dn, $query);
echo "ldap_error: " . ldap_error($conn);
ldap_get_option($conn, LDAP_OPT_DIAGNOSTIC_MESSAGE, $err);
echo "ldap_get_option: $err";
?>
This resulted in:
ldap_error: Can't contact LDAP server
ldap_get_option: TLS: hostname does not match CN in peer certificate