Signatur
Beschreibung
yaz_search() ist Teil der PHP-YAZ-Erweiterung und dient der Kommunikation mit Z39.50-Servern, die typischerweise in Bibliothekssystemen und Informationsdatenbanken eingesetzt werden. Die Funktion registriert eine Suchanfrage für eine gegebene YAZ-Verbindung, führt sie jedoch nicht sofort aus — die tatsächliche Übermittlung an den Server erfolgt erst beim Aufruf von yaz_wait().
Der Parameter type legt die Abfragesprache fest. Unterstützt werden unter anderem rpn für RPN-Abfragen im PQF-Format (Prefix Query Format) sowie cql für CQL-Abfragen (Common Query Language). RPN/PQF ist das gebräuchlichste Format im Z39.50-Umfeld.
Diese nicht-blockierende Architektur ermöglicht es, mehrere YAZ-Verbindungen parallel zu verwalten und Suchanfragen an mehrere Server gleichzeitig abzusetzen, was für verteilte Bibliothekssysteme oder Metasuchen sehr nützlich ist.
Hinweis: Die YAZ-Erweiterung ist eine PECL-Erweiterung und muss separat installiert werden. Sie setzt die Installation der libyaz-Bibliothek voraus.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $id Pflicht | resource | Eine YAZ-Verbindungsressource, die zuvor mit yaz_connect() erzeugt wurde. |
|
| $type Pflicht | string | Gibt die Abfragesprache an. Gebräuchliche Werte sind 'rpn' für RPN/PQF-Abfragen und 'cql' für CQL-Abfragen. |
|
| $query Pflicht | string | Die eigentliche Suchanfrage im gewählten Format, z. B. eine PQF-Zeichenkette wie @attr 1=4 "PHP" für eine Titelsuche. |
Rückgabewert
true zurück, wenn die Suche erfolgreich vorbereitet wurde, andernfalls false. Fehler können mit yaz_error() abgerufen werden.Beispiele
Einfache Titelsuche mit RPN/PQF
<?php
// Verbindung zu einem Z39.50-Server herstellen
$conn = yaz_connect('z3950.loc.gov:7090/Voyager');
if (!$conn) {
die('Verbindung fehlgeschlagen');
}
// Syntax und Elemente konfigurieren
yaz_syntax($conn, 'usmarc');
yaz_element($conn, 'F');
// Titelsuche vorbereiten (Attribut 1=4 = Title)
$result = yaz_search($conn, 'rpn', '@attr 1=4 "PHP Programming"');
if (!$result) {
die('Suche konnte nicht vorbereitet werden: ' . yaz_error($conn));
}
// Verbindungen abwarten und Abfragen ausführen
yaz_wait();
// Fehler prüfen
if (yaz_errno($conn) != 0) {
echo 'Suchfehler: ' . yaz_error($conn);
} else {
$hits = yaz_hits($conn);
echo "Gefundene Treffer: $hits\n";
// Ersten Treffer abrufen
if ($hits > 0) {
yaz_range($conn, 1, 1);
yaz_wait();
$record = yaz_record($conn, 1, 'string');
echo $record;
}
}
Parallele Suche auf mehreren Z39.50-Servern
<?php
$servers = [
'z3950.loc.gov:7090/Voyager',
'bibsys.no:2100/BIBSYS',
];
$connections = [];
foreach ($servers as $server) {
$conn = yaz_connect($server);
if ($conn) {
yaz_syntax($conn, 'usmarc');
// CQL-Abfrage vorbereiten
yaz_search($conn, 'rpn', '@attr 1=1003 "Knuth"');
$connections[] = $conn;
}
}
// Alle Verbindungen gleichzeitig abarbeiten
yaz_wait();
foreach ($connections as $conn) {
if (yaz_errno($conn) == 0) {
echo 'Treffer: ' . yaz_hits($conn) . "\n";
} else {
echo 'Fehler: ' . yaz_error($conn) . "\n";
}
}
// Wichtig · Fallstricke
Deprecation-Hinweis: Die YAZ-PHP-Erweiterung wird nicht mehr aktiv gepflegt und ist für moderne PHP-Versionen (ab PHP 7+) möglicherweise nicht verfügbar oder muss manuell kompiliert werden. Für neue Projekte sollte eine alternative Bibliothek oder ein HTTP-basiertes SRU/SRW-Interface in Betracht gezogen werden.
Die Suche wird erst mit yaz_wait() tatsächlich an den Server übermittelt. Wird yaz_wait() nicht aufgerufen, findet keine Kommunikation statt und es werden keine Ergebnisse geliefert.
PQF-Attribute wie @attr 1=4 sind Z39.50-Bib-1-Attributsätze: 1=4 steht für Title, 1=1003 für Author, 1=7 für ISBN usw. Die genaue Unterstützung hängt vom jeweiligen Z39.50-Server ab.