mehrere Zeilen aufeinmal auslesen
igor
- datenbank
Hallo
ist es möglich mit einer SQL Abfrage mehrere Zeilen einer Tabelle aufeinmal auszulesen
sowas in der Art wie:
SELECT * FROM Crimptab WEHRE ID (1,44,57,34,12)
geht sowas ?
sowas in der Art wie:
SELECT * FROM Crimptab WEHRE ID (1,44,57,34,12)geht sowas ?
du suchst IN
SELECT * FROM Crimptab WEHRE ID IN(1,44,57,34,12)
sowas in der Art wie:
SELECT * FROM Crimptab WEHRE ID (1,44,57,34,12)geht sowas ?
du suchst IN
SELECT * FROM Crimptab WEHRE ID IN(1,44,57,34,12)
danke, nur leider klappt es so noch nicht, wenn ich die Fehlermeldung richtig verstehe meckert er an den runden Klammern ?!?
hier mal die Meldung
DBD::mysql::st execute failed: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ')' at line 1 at /srv/www/cgi-bin/TMAG/infocrimp.pl line 58.
und so schaut das script an der Stelle aus
$sql7=qq{select * from Crimptab WHERE CID IN($qrycrimp)};
$abfr7=$data2->prepare($sql7);$abfr7->execute;
while (@ergf = $abfr7->fetchrow_array)
{
$count7++;
@CID[$count7]=$ergf;
}
$abfr7->finish;
$data2->disconnect;
danke, nur leider klappt es so noch nicht, wenn ich die Fehlermeldung richtig verstehe meckert er an den runden Klammern ?!?
führ das ganze direkt am mysql-server aus, ggf hast du ein php-problem
SELECT feldname FROM tabellen WHERE feld IN ('1','3','5','7');
sollte kein problem sein
Hi,
ggf hast du ein php-problem
ich glaube nicht, dass in dem Perl-Code ein PHP-Problem vorliegt ;-)
Cheatah
ich glaube nicht, dass in dem Perl-Code ein PHP-Problem vorliegt ;-)
jetzt wo dus sagst :D es ist unwahrscheinlich, aber nicht gänzlich auszuschließen ;)
führ das ganze direkt am mysql-server aus, ggf hast du ein php-problem
SELECT feldname FROM tabellen WHERE feld IN ('1','3','5','7');
sollte kein problem sein
ok, das scheint nun zu klappen, hab die Variable in "" gesetzt.
nun bekomm ich mal keine Fehlermeldung mehr, aber dummerweise ließt er mir nix aus der Datenbank... da muss ich mal nochmal n bissl schaun
dankeschön
ok, das scheint nun zu klappen, hab die Variable in "" gesetzt.
doppelte hochkommas bereiten mysql nicht gerade große freude als stringberenzer ;)
wenns zahlen sind, sind die stringbegrenzer ansich aber nicht notwendig
echo $begrüßung;
ok, das scheint nun zu klappen, hab die Variable in "" gesetzt.
na, offensichtlich nicht, nur hast du jetzt keinen Syntaxfehler mehr.
nun bekomm ich mal keine Fehlermeldung mehr, aber dummerweise ließt er mir nix aus der Datenbank... da muss ich mal nochmal n bissl schaun
Deshalb nochmal die schon von Cheatah gestellte und von dir nicht beantwortete Frage: Wie lautet das SQL-Statement? Der Code, der es erzeugt ist erst den zweiten Blick wert. Der erste muss auf eine Kontrollausgabe des erzeugten Statements gerichtet werden, damit du siehst, was dein Code für ein fehlerhaftes Ergebnis erzeugt.
echo "$verabschiedung $name";
Deshalb nochmal die schon von Cheatah gestellte und von dir nicht beantwortete Frage: Wie lautet das SQL-Statement? Der Code, der es erzeugt ist erst den zweiten Blick wert. Der erste muss auf eine Kontrollausgabe des erzeugten Statements gerichtet werden, damit du siehst, was dein Code für ein fehlerhaftes Ergebnis erzeugt.
was is denn bitte ein SQL Statement ?
wenn du mir sagst wie ich das erzeuge was du brauchst dann mach ich das gern :)
echo $begrüßung;
was is denn bitte ein SQL Statement ?
Ein SQL-Statement ist das was du dem SQL-Server zur Abarbeitung übergibst, also dein SELECT ...
wenn du mir sagst wie ich das erzeuge was du brauchst dann mach ich das gern :)
Du hast es schon erzeugt, nur anscheinend fehlerhaft. Du musst dir nur mal das Ergebnis anzeigen lassen, so wie es aussieht, bevor du es den MySQL-Funktionen übergibst, also den Inhalt der Variablen $sql7 ausgeben.
echo "$verabschiedung $name";
Du hast es schon erzeugt, nur anscheinend fehlerhaft. Du musst dir nur mal das Ergebnis anzeigen lassen, so wie es aussieht, bevor du es den MySQL-Funktionen übergibst, also den Inhalt der Variablen $sql7 ausgeben.
ok, also die Ausgabe von $sql7 ist:
select * FROM Crimptab WHERE CID IN ('1404','1410','1411','1412')
und es geht nicht.
echo "$verabschiedung $name";
select * FROM Crimptab WHERE CID IN ('1404','1410','1411','1412')
und es geht nicht.
wenn du exakt dies am sql-server ausführst (per commandline/bash oder wie auch immer), was passiert dann?
select * FROM Crimptab WHERE CID IN ('1404','1410','1411','1412')
und es geht nicht.wenn du exakt dies am sql-server ausführst (per commandline/bash oder wie auch immer), was passiert dann?
erschreckenderweise funktionert es da.
danke, das hat mir schonmal weitergeholfen, nun muss ich nur noch mein Fehler im script finden...
echo $begrüßung;
ok, also die Ausgabe von $sql7 ist:
select * FROM Crimptab WHERE CID IN ('1404','1410','1411','1412')
Das passt zwar nicht zu dem in https://forum.selfhtml.org/?t=175383&m=1152696 angegebenen Code, sieht aber soweit fehlerfrei aus.
echo "$verabschiedung $name";
Hi,
SELECT * FROM Crimptab WEHRE ID (1,44,57,34,12)
selektiere niemals "*", wenn Du nicht weißt, warum Du es nicht tun sollst.
danke, nur leider klappt es so noch nicht, wenn ich die Fehlermeldung richtig verstehe meckert er an den runden Klammern ?!?
Wie lautet das tatsächliche Statement?
Cheatah
Hi,
SELECT * FROM Crimptab WEHRE ID (1,44,57,34,12)
selektiere niemals "*", wenn Du nicht weißt, warum Du es nicht tun sollst.
Wie lautet das tatsächliche Statement?
Cheatah
aber wenn ich doch alle Daten brauche :) ...
aber wenn ich doch alle Daten brauche :) ...
wenn du WIRKLICH alle brauchst, dann ist das durchaus berechtigt - das ist aber selten der fall ;)
aber auch wenn du alle brauchst, solltest du die felder separiert angeben, wenn sich etwas am datenmodell ändert (zb felder dazukommen), kannst du so besser (und performanceschonender) reagieren
aber auch wenn du alle brauchst, solltest du die felder separiert angeben, wenn sich etwas am datenmodell ändert (zb felder dazukommen), kannst du so besser (und performanceschonender) reagieren
in dem Fall brauch ich echt alle, aber das könnte ich dann nochmal umändern wenn es denn mal auch funktioniert :)
ich bekomm einfach keine Daten angezeigt die ich aus der DB ziehe.
findest du nen Fehler ?
$data1 = "DBI:mysql:stecker";
$data2 = DBI->connect("$data1", "$username", "$pw", { RaiseError => 1 }) || die("Kann DB nicht öffnen!");
$sql7=qq{select * from Crimptab WHERE CID IN ('1409,1411,1412') };
$abfr7=$data2->prepare($sql7);$abfr7->execute;
while (@ergf = $abfr7->fetchrow_array)
{
$count7++;
@CID[$count7]=$ergf;
}
$abfr7->finish;
$data2->disconnect;
print "@CID\n"; #das array CID sollte eigentlich in HTML ausgegeben werden aber es ist leer :-(
Moin Moin!
$sql7=qq{select * from Crimptab WHERE CID IN ('1409,1411,1412') };
$abfr7=$data2->prepare($sql7);$abfr7->execute;
Schlechte Idee. Insbesondere, wenn die Zahlen nicht fest im Script stehen, sondern von außen kommen, baust Du hier eine SQL Injection. Außerdem sabotierst Du jeden Ansatz, geparste Statements zu cachen. Benutze Platzhalter und übergib die konkreten Werte an Execute.
Zu "select *" hat Cheatah schon fast genug gesagt. Das Du Dich hier auch noch darauf verlässt, dass die Daten in einer festen Reihenfolge aus der DB kommen (fetchrow_array()), ist extrem gefährlich. Wenn schon "select *", dann fetchrow_hashref() und anschließend den Hash kopieren.
Von den wirren Variablennamen und unnützen Interpolationen will ich jetzt gar nicht anfangen.
Alexander
Schlechte Idee. Insbesondere, wenn die Zahlen nicht fest im Script stehen, sondern von außen kommen, baust Du hier eine SQL Injection. Außerdem sabotierst Du jeden Ansatz, geparste Statements zu cachen. Benutze Platzhalter und übergib die konkreten Werte an Execute.
ok, wo gehts zum nächsten Chinesischkurs ? :-)
Von den wirren Variablennamen und unnützen Interpolationen will ich jetzt gar nicht anfangen.
ich halt ne sehr kreative Ader ;-)
Alexander
Moin Moin!
Schlechte Idee. Insbesondere, wenn die Zahlen nicht fest im Script stehen, sondern von außen kommen, baust Du hier eine SQL Injection. Außerdem sabotierst Du jeden Ansatz, geparste Statements zu cachen. Benutze Platzhalter und übergib die konkreten Werte an Execute.
ok, wo gehts zum nächsten Chinesischkurs ? :-)
Bei CPAN und bei der Wikipedia.
Von den wirren Variablennamen und unnützen Interpolationen will ich jetzt gar nicht anfangen.
ich halt ne sehr kreative Ader ;-)
Leb die besser woanders aus, in dem Zustand möchte ich den Code nicht warten müssen. Und in drei Monaten willst Du es auch nicht mehr.
Alexander
Hi,
$sql7=qq{select * from Crimptab WHERE CID IN ('1409,1411,1412') };
Wenn Du so wie hier nur einen Wert (den String '1409,1411,1412') hast, brauchst Du kein IN, da kannst Du direkt mit CID = '1409,1411,1412' abfragen.
cu,
Andreas
SELECT * FROM Crimptab WEHRE ID (1,44,57,34,12)
selektiere niemals "*", wenn Du nicht weißt, warum Du es nicht tun sollst.
aber wenn ich doch alle Daten brauche :) ...
Also, ich kann mir ja nur die Namen der Spalten merken, nicht die Reihenfolge. ;-)