kostenloser Webspace werbefrei: lima-city


Zeile in Datenbank schreiben nicht möglich

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    fuerderer

    fuerderer hat kostenlosen Webspace.

    Hallo zusammen,

    ich hab ein Problem mit folgendem Code:
    <?php
    
    $db_link=mysql_connect('mysql.lima-city.de','USER******','***') or die('Error');
    
    $sql="
      INSERT INTO `aufrufe`
      ( 
      `seite` , `zeit` , `ip` , `parameter`
      ) 
      VALUES
      (
      'index.php' , 'irgendwann', 'irgendwer', 'nicht abgefragt'
      );
    ";
    mysql_query($sql);
    echo mysql_error();
    
    ?>
    Ich möchte damit eine Zeile in die Datenbank `aufrufe` schreiben.
    die Zeile 'echo mysql_error();' liefert mir "No database selected".
    Ich hoffe mir kann jemand helfen. Vielleicht ist es auch nur ein Schreibfehler oder ein fehlendes Zeichen.
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

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

  3. die Zeile 'echo mysql_error();' liefert mir "No database selected".


    Und warum selectest du dann keine? Ich sehe den Aufruf der Datenbankverbindung und einen Insert, jedoch keine Datenbankauswahl :)

    Beitrag zuletzt geändert: 19.3.2012 19:13:21 von fabo
  4. Dir fehlt einfach die Auswahl einer Datenbank
    mysql_select_db("********") or die
    ("Die Datenbank existiert nicht");
    mfg
  5. Autor dieses Themas

    fuerderer

    fuerderer hat kostenlosen Webspace.

    Vielen Dank für den Tipp.
    Ich wusste nicht, dass man nach mysql_connect noch mysql_select_db braucht.

    Auf jeden Fall funktioniert es jetzt.
  6. fuerderer schrieb:

    $db_link=mysql_connect('mysql.lima-city.de','USER******','***') or die('Error');

    Ich möchte damit eine Zeile in die Datenbank `aufrufe` schreiben.

    Dein Code zeigt 3 Parameter (host, User und Passwort), benötigt werden aber derer vier (der Datenbankname fehlt)

    Du kannst abfragen, was Du willst, solange Mysql nicht weiß, wo es danach suchen soll, wirst Du kein Ergebnis erhalten. :wink:

    Edit: Meine Antwort war kalinistisch. Sorry, aber den Beitrag von Fabo, der genau gleiches sagt, hab ich, warum auch immer, überlesen. *schäm*

    Beitrag zuletzt geändert: 20.3.2012 13:38:50 von fatfreddy
  7. fuerderer schrieb:
    ...
    $sql="
      INSERT INTO `aufrufe` ( `seite` , ...
    ...
    Ich möchte damit eine Zeile in die Datenbank `aufrufe` schreiben...
    das solltest du aber nicht möchten, weil du bei lima keine datenbank namens aufrufe hast ;)

    fabo schrieb:
    die Zeile 'echo mysql_error();' liefert mir "No database selected".
    Und warum selectest du dann keine?)
    weil man nicht explizite eine datenbank selektieren muss?¿

    syberpsace schrieb:
    Dir fehlt einfach die Auswahl einer Datenbank
    mysql_select_db("********") or die
    ("Die Datenbank existiert nicht");
    mfg
    nein. ihm fehlt das nicht (unbedingt ;)

    fuerderer schrieb:
    ... Ich wusste nicht, dass man nach mysql_connect noch mysql_select_db braucht.
    Auf jeden Fall funktioniert es jetzt.
    also noch immer: du brauchst nicht (unbedingt) mysql_select_db('<database>') oder mysql_query('USE <database>') [was ident ist].

    fatfreddy schrieb:
    ... Dein Code zeigt 3 Parameter (host, User und Passwort), benötigt werden aber derer vier (der Datenbankname fehlt) ...
    es ist richtig, dass die funktion 4 parameter hat, die sind allerdings allesamt optional (für den günstigen fall ;)

    es ist aber richtig, dass ihm die datenbank fehlt, was aber auch so gehen kann:
    <?php
    ...
    $conn = mysql_connect(['mysql.lima-city.de', 'USER123456', '<passwd>']);
    
    $sql = <<< EOT
    INSERT INTO db_123456_n.aufrufe
      -- COLUMNS:
      (seite, zeit, ip, parameter)
      VALUES ('index.php', 'irgendwann', 'irgendwer', 'nicht abgefragt')
    EOT;
    
    $res = ($r = mysql_query($sql)) ?
      $r:
      exit('<pre>' . print_r(array(mysql_errno(), mysql_error()), true));
    
    // wenn kein fehler, hier geht es weiter.
    (vorsicht! '123456' in username und datenbankname! außerdem kannst in der query auf die blöden backticks überall verzichten, sie werden nur gebraucht um reservierte wörter zu maskieren.)
    der sinn der sache ist dann klar, wenn man bedenkt, dass es möglich ist mehrere datenbanken gleichzeitig abzufragen:
    SELECT <alias_1>.<column_1>,
           <alias_2>.<column_2>
    FROM <database_1>.<table_1> [AS] <alias_1>,
         <database_2>.<table_2> [AS] <alias_2>
    ...
    literatur zum reinziehen:
    1. SELECT
    Sie können eine Tabelle in der Standarddatenbank*) als tbl_name oder – wenn Sie eine Datenbank ausdrücklich angeben wollen – als db_name.tbl_name referenzieren. Eine Spalte können Sie als col_name, tbl_name.col_name oder db_name.tbl_name.col_name referenzieren. Sie müssen das Präfix tbl_name oder db_name.tbl_name für eine Spaltenreferenzierung nicht angeben, sofern die Referenzierung eindeutig ist. Beispiele für Mehrdeutigkeiten, die die spezifischeren Formen der Spaltenreferenzierung erfordern, finden Sie in
    Abschnitt 9.2
    (Standarddatenbank*) ist die, die man explizite [mysql_select_db(...) / 'USE <database>'] ausgewählt hat ;)

    2. um es noch besser zu verstehen: 9.2.1. Qualifikatoren für Bezeichner
    es musste leider ins rechte licht gerückt werden ;)
  8. hemiolos schrieb:
    fuerderer schrieb:
    ...
    $sql="
      INSERT INTO `aufrufe` ( `seite` , ...
    ...
    Ich möchte damit eine Zeile in die Datenbank `aufrufe` schreiben...
    das solltest du aber nicht möchten, weil du bei lima keine datenbank namens aufrufe hast ;)

    Nach allgemeiner MySql-Syntax wäre beim "Insert into aufrufe" "aufrufe" der Name einer Tabelle innerhalb einer vorher (hier fehlerhaft) aufgebauten Datenbankverbindung.


    fatfreddy schrieb:
    ... Dein Code zeigt 3 Parameter (host, User und Passwort), benötigt werden aber derer vier (der Datenbankname fehlt) ...

    es ist richtig, dass die funktion 4 parameter hat, die sind allerdings allesamt optional (für den günstigen fall ;)

    Optional sind die Parameter aber nur dann, wenn eine Auslassung nicht zu Interpretationsproblemen führt. ;) Ein Umstand, der aus der Fragestellung nicht hervorgeht. Ob wir hier den "günstigsten Fall" vorliegen haben, entzieht sich unserer (der Antwortenden) Kenntnis



  9. fatfreddy schrieb:
    Nach allgemeiner MySql-Syntax wäre beim "Insert into aufrufe" "aufrufe" der Name einer Tabelle innerhalb einer vorher (hier fehlerhaft) aufgebauten Datenbankverbindung.
    ja klar. aber was willst mit dem satz eigentlich sagen? niemand behauptete, dass es in diesem speziellen fall so richtig sein sollte.

    Optional sind die Parameter aber nur dann, wenn eine Auslassung nicht zu Interpretationsproblemen führt. ;) Ein Umstand, der aus der Fragestellung nicht hervorgeht. Ob wir hier den "günstigsten Fall" vorliegen haben, entzieht sich unserer (der Antwortenden) Kenntnis
    das weiter zu diskuttieren ist an sich redundant. ich habe alle wichtigen links in meinem beitrag angegeben. lesen sollte jeder selber in der lage sein, sonst nimmt das hier nie ein ende ;)
  10. 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!