[MySQL] Prüfung Volltext-Syntax.
Thomas Kellner
- php
Hallo,
Gibt es wirkunsvolle Methoden um die Syntax einer Volltextsuche in MySQL zu prüfen. Ich meine damit den Suchwert für eine Suchmaschine, die in PHP geschrieben ist. Wie kann also die Syntax zuverlässig prüfen. Beipiel:
mysql > SELECT * FROM tabelle
mysql > WHERE MATCH(spalte
)
mysql > AGAINST ('+www www'nn' IN BOOLEAN MODE)
^^^
Diese Syntax ist falsch wegen dem '.
Mfg.
hi,
Gibt es wirkunsvolle Methoden um die Syntax einer Volltextsuche in MySQL zu prüfen. Ich meine damit den Suchwert für eine Suchmaschine, die in PHP geschrieben ist. Wie kann also die Syntax zuverlässig prüfen. Beipiel:
mysql > SELECT * FROM
tabelle
mysql > WHERE MATCH(spalte
)
mysql > AGAINST ('+www www'nn' IN BOOLEAN MODE)
^^^
Diese Syntax ist falsch wegen dem '.
das ist ein Quoting-Problem. Ich weiß nich mehr genau, wie das in php geht, aber in Perl kannst Du das etwa so machen:
$sql = "select * from tabelle where match(spalte) against (".$dbh->quote('$query')." in boolean mode)";
Dabei ist $dbh das DB-Handle und $query Dein eingelesener String bzw. der Inhalt davon.
Gruß
Reiner
Hallo,
$sql = "select * from tabelle where match(spalte) against (".$dbh->quote('$query')." in boolean mode)";
oder auch:
my $sth =$dbh->prepare("select * from tabelle where match(spalte) against (?) in boolean mode)");
$sth->execute($query);
welches das automatisch erledigt.
gruss
my $sth =$dbh->prepare("select * from tabelle where match(spalte) against (?) in boolean mode)");
$sth->execute($query);
ich will den ganzen Suchwert vorher prüfen, bevor er in die MySQL-Anweisugn eingesetzt wird. Reicht da die MySQL-Fehlermeldung oder gibt es auch noch andere Kontrollmechanismen?
Mfg.
echo $begrüßung;
ich will den ganzen Suchwert vorher prüfen, bevor er in die MySQL-Anweisugn eingesetzt wird. Reicht da die MySQL-Fehlermeldung oder gibt es auch noch andere Kontrollmechanismen?
Nein, der reicht nicht, weil damit auch wenn
$foo = "' OR 1 OR '";
ist bei
$query = "SELECT * FROM table WHERE x='$foo'";
eine gültige MySQL-Syntax erzeugt wird.
Beachte bitte das Handbuch-Kapitel zu Database Security und zum Quotieren von Eingaben ist mysql_real_escape_string() zuständig.
echo "$verabschiedung $name";
echo $begrüßung;
my $sth =$dbh->prepare("select * from tabelle where match(spalte) against (?) in boolean mode)");
$sth->execute($query);
Fehlt da nicht noch irgendwo die Übergabe des Parameters, der anstelle des Platzhalters ? eingesetzt werden soll?
echo "$verabschiedung $name";
Hi,
> > my $sth =$dbh->prepare("select * from tabelle where match(spalte) against (?) in boolean mode)");
> > $sth->execute($query);
Fehlt da nicht noch irgendwo die Übergabe des Parameters, der anstelle des Platzhalters ? eingesetzt werden soll?
ich habs etwas schlecht geschrieben, hab den vorhergehenden code verwendet, und da war der parameter $query:
> $sql = "select * from tabelle where match(spalte) against (".$dbh->quote('$query')." in boolean mode)";
Falls du es nachlesen möchtest, so kannst du es zum Beispiel hier tun, wenn du nach DBI suchst. (ist anscheinend im moment nicht erreichbar.)
gruss