kostenloser Webspace werbefrei: lima-city


MySQL 'where in'

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    mczernin

    Kostenloser Webspace von mczernin

    mczernin hat kostenlosen Webspace.

    Liebe Community!
    Ich habe folgendes Problem, das ich bisher nicht lösen konnte:

    ich habe folgenden mysql_query mit php der das Ergebnis in einem array speichern sollte:

    $sql = mysql_query("SELECT x FROM y WHERE z = '".$_GET['w']."'")
    $rows1 = array();
    while($r1 = mysql_fetch_assoc($sql)) {
        $rows1[] = $r1;
    }


    jetzt habe ich versucht diesen array in einem neues query zu verwenden:

    mysql_query("SELECT * from table WHERE a IN ('".$rows1."')");


    leider liefert dies ein leeres Ergebnis zurück :confused:

    Danke, lg & frohe Festtage (zum Teil schon vorbei)
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. Wie schaut der Befehl denn aus, wenn die Variable eingesetzt wurde? Lass ihn dir doch mal ausgeben.
  4. Autor dieses Themas

    mczernin

    Kostenloser Webspace von mczernin

    mczernin hat kostenlosen Webspace.

    tchab schrieb:
    Wie schaut der Befehl denn aus, wenn die Variable eingesetzt wurde? Lass ihn dir doch mal ausgeben.


    SELECT * from table WHERE a IN ('Array')


    komisch da werden ja gar keine werte ausgegeben

    Beitrag zuletzt geändert: 26.12.2014 22:45:39 von mczernin
  5. mczernin schrieb:
    komisch da werden ja gar keine werte ausgegeben
    Was du suchst, kannst du mit implode() erreichen.
    mysql_query("SELECT * from table WHERE a IN ('".implode('\',\'',$rows1)."')");
    (ungetestet)

    Mach dir außerdem Gedanken über Sicherheit. Informiere dich über SQL-Injection. Du darfst Daten, die vom Benutzer, z.B. aus $_GET kommen nicht einfach ungeprüft in einen Datenbankbefehl einsetzen.
  6. mczernin schrieb:
    mysql_query

    Bitte beachte, dass die mysql_* Befehle ab PHP 5.5 als veraltet gekennzeichnet werden und später komplett entfernt werden sollen. PDO und MySQLi können die alten mysql_* Befehle ersetzen.

    Hast du auch die Tabellennamen und Spaltennamen richtig angegeben?
  7. Autor dieses Themas

    mczernin

    Kostenloser Webspace von mczernin

    mczernin hat kostenlosen Webspace.

    fuerderer schrieb:
    mczernin schrieb:
    komisch da werden ja gar keine werte ausgegeben
    Was du suchst, kannst du mit implode() erreichen.
    mysql_query("SELECT * from table WHERE a IN ('".implode('\',\'',$rows1)."')");
    (ungetestet)

    Mach dir außerdem Gedanken über Sicherheit. Informiere dich über SQL-Injection. Du darfst Daten, die vom Benutzer, z.B. aus $_GET kommen nicht einfach ungeprüft in einen Datenbankbefehl einsetzen.


    Danke für Deine Hilfe.!! Leider wird der befehl jetzt so ausgegeben:

    SELECT * from table WHERE a IN ('Array','Array','Array','Array','Array')


    Daher ergibt der zweite befehl wieder kein erebnis...


    webfreclan schrieb:
    mczernin schrieb:
    mysql_query

    Bitte beachte, dass die mysql_* Befehle ab PHP 5.5 als veraltet gekennzeichnet werden und später komplett entfernt werden sollen. PDO und MySQLi können die alten mysql_* Befehle ersetzen.

    Hast du auch die Tabellennamen und Spaltennamen richtig angegeben?


    Heisst das jetzt, dass ich einfach mysql_query durch mysqli_query ersetzen kann? Ich hab die spaltennamen und soaltennamen hier umbenannt.

    Lg,
    Max
  8. mczernin schrieb:
    Heisst das jetzt, dass ich einfach mysql_query durch mysqli_query ersetzen kann?

    Bei mysql_query müsste dass noch gehen, aber andere mysql_* Befehle wurden nicht 1:1 in MySQLi übernommen ... > Am besten immer auf PHP.net nachschauen! :wink:
  9. mczernin schrieb:
    Danke für Deine Hilfe.!! Leider wird der befehl jetzt so ausgegeben:

    SELECT * from table WHERE a IN ('Array','Array','Array','Array','Array')


    Daher ergibt der zweite befehl wieder kein erebnis...
    Mach mal bitte
    var_dump($rows1);
    nachdem diese Variable erstellt wurde und teile uns mit, was der Befehl ausspuckt.
    Vermutlich liefert die DB wirklich 5-Mal "Array"
  10. Autor dieses Themas

    mczernin

    Kostenloser Webspace von mczernin

    mczernin hat kostenlosen Webspace.

    fuerderer schrieb:
    mczernin schrieb:
    Danke für Deine Hilfe.!! Leider wird der befehl jetzt so ausgegeben:

    SELECT * from table WHERE a IN ('Array','Array','Array','Array','Array')


    Daher ergibt der zweite befehl wieder kein erebnis...
    Mach mal bitte
    var_dump($rows1);
    nachdem diese Variable erstellt wurde und teile uns mit, was der Befehl ausspuckt.
    Vermutlich liefert die DB wirklich 5-Mal "Array"


    Hi :)

    das spuckt das ganze aus:

    array(5) { [0]=> array(1) { ["x"]=> string(5) "test1" } [1]=> array(1) { ["x"]=> string(5) "test2" } [2]=> array(1) { ["x"]=> string(5) "test3" } [3]=> array(1) { ["x"]=> string(5) "test4" } [4]=> array(1) { ["x"]=> string(5) "test5" } }


    lg max
  11. Richtig, darauf hätte ich auch früher kommen können!
    Ich hab dein erstes Codebeispiel angepasst, so sollte es funktionieren:
    $sql = mysql_query("SELECT x FROM y WHERE z = '".$_GET['w']."'")
    $rows1 = array();
    while($r1 = mysql_fetch_assoc($sql)) {
        $rows1[] = $r1["x"];
    }
    Die vierte Zeile hab ich am Ende verändert.
    Erklärung: mysql_fetch_assoc() liefert selbst schon ein Array. Du möchtest jetzt aber nicht die kompletten Arrays sammeln, sondern nur den Inhalt der Spalte 'x'. Das ist ein Unterschied, auch wenn du nur eine Spalte abfragst.
  12. Autor dieses Themas

    mczernin

    Kostenloser Webspace von mczernin

    mczernin hat kostenlosen Webspace.

    fuerderer schrieb:
    Richtig, darauf hätte ich auch früher kommen können!
    Ich hab dein erstes Codebeispiel angepasst, so sollte es funktionieren:
    $sql = mysql_query("SELECT x FROM y WHERE z = '".$_GET['w']."'")
    $rows1 = array();
    while($r1 = mysql_fetch_assoc($sql)) {
        $rows1[] = $r1["x"];
    }
    Die vierte Zeile hab ich am Ende verändert.
    Erklärung: mysql_fetch_assoc() liefert selbst schon ein Array. Du möchtest jetzt aber nicht die kompletten Arrays sammeln, sondern nur den Inhalt der Spalte 'x'. Das ist ein Unterschied, auch wenn du nur eine Spalte abfragst.


    Danke vielmals!! Es funktioniert!!
  13. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!