Net::MySQL Select will nicht wie ich will

26/12/2007 - 20:17 von Sven Mönnich | Report spam
Hallo again,

Ich benutze das Modul Net::MySQL um daten in eine Tabelle zu bekommen.
Nun möchte ich nicht das dauernd doppelte eintràge geschrieben werden.
Das versuche ich mit

$mysql->query('SELECT ID FROM emails WHERE email Like "\%'.$email.'\%");
if ($mysql->has_selected_record){
} else {
$mysql->query('INSERT INTO emails (email) VALUES ("'.$email.'")');
}

zu umgehen. Zu meiner ernüchterung pasiert da allerdings nichts.
Ich hab schon alle gefundenen Beispiele die mir Google und Co lieferten
durch. Bei einigen bleibt das Script bei der SQL abfrage hàngen bei
anderen wird mein vorhaben ignoriert.

Irgendwie ist das heute nicht meine Woche, mein Monat oder Jahr.
So blöd kann man doch nicht sein, der entscheidene Hinweis muss doch
irgendwo zu finden sein?

Könnt mich da vielleicht jemand mal ganz feste mit der Nase drauf stupsen ?

Vielen Dank auch -Sven-
 

Lesen sie die antworten

#1 sheinrich
27/12/2007 - 10:38 | Warnen spam
On Dec 26, 8:17 pm, Sven Mönnich wrote:
Hallo again,

Ich benutze das Modul Net::MySQL um daten in eine Tabelle zu bekommen.
Nun möchte ich nicht das dauernd doppelte eintràge geschrieben werden.
Das versuche ich mit

$mysql->query('SELECT ID FROM emails WHERE email Like "\%'.$email.'\%");
if ($mysql->has_selected_record){} else {

$mysql->query('INSERT INTO emails (email) VALUES ("'.$email.'")');

}

zu umgehen. Zu meiner ernüchterung pasiert da allerdings nichts.
Ich hab schon alle gefundenen Beispiele die mir Google und Co lieferten
durch. Bei einigen bleibt das Script bei der SQL abfrage hàngen bei
anderen wird mein vorhaben ignoriert.

Irgendwie ist das heute nicht meine Woche, mein Monat oder Jahr.
So blöd kann man doch nicht sein, der entscheidene Hinweis muss doch
irgendwo zu finden sein?

Könnt mich da vielleicht jemand mal ganz feste mit der Nase drauf stupsen ?

Vielen Dank auch -Sven-



Hallo Sven!

use strict;
use warnings;

Benutze das Error-Checking der verwendeten Module und pruefe immer die
Rueckgabewerte der Methoden.

Du hast das Quoting bei Perl noch nicht verstanden. Innerhalb single
quotes wird _nicht_ interpoliert.

Probiere folgendes:
#$email = ""; <- gibt eine Warnung. Warum?

$email = ''; # <- tut das Gewuenschte

# Die folgende (von dir uebernommene) Zeile hat einen Syntax-Fehler
und kann schon deshalb nicht kompiliert werden.
# Finde ihn heraus und korrigiere ihn
my $test = 'SELECT ID FROM emails WHERE email Like "\%'.$email.'\%";

print $test, "";

Ausserdem ist es wahrscheinlich auch eine falsche MySQL-Syntax. In
Oracle muessen Literale jedenfalls in single quotes gepackt werden,
nicht in double quotes, wie du es zu tun versuchst. Das waeren dann
bei Oracle Bezeichner.

Ich kenne Net::MySQL nicht, aber wenn es die Verwendung von Bind-
Parametern unterstuetzen sollte, dann benutze diese.
Besonders, wenn du das selbe Select-Statement innerhalb eines
Programmaufrufs mehrfach aufrufen willst (mit wechselnden Parametern).
Oder benutze gleich DBI.

Vor allem, tu dir den Gefallen und platziere als erste Anweisungen in
_jedes_ script:
use strict;
use warnings;

Und lese!
Zum Quoting in Perl gibt es wesentlich mehr zu sagen, als die
Unterschiede von Single und Double Quotes.
Du hast mit Sicherheit irgendeine perldoc zur Verfuegung.
Guck da rein, oder suche bei Google nach
perl quoting


Gruesse und guten Rutsch,
Steffen

Ähnliche fragen