kostenloser Webspace werbefrei: lima-city


Mysql insert!

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    s******2

    Abend,

    könnte mir, irgendjemand helfen?
    Ich rätsle schon die ganze Zeit, warum das nicht geht.

    test.php
    <?php
    mysql_connect("","name","passwort");
    mysql_select_db("arcanum");
    $sql = mysql_query("insert news (id, titel, news, autor, datum, sprache) values ('7', 'titel', 'news', 'autor', '2010-09-10', 'de')");
    $num = mysql_affected_rows($sql);
    ?>


    ref="/tag/fehler">Fehlermeldung:
    Warning: mysql_affected_rows() expects parameter 1 to be resource, boolean given in C:\xampp\htdocs\arcanum\test.php on line 5


    Das seltsame ist, dass der Datenbankeintrag trotzdem gemacht wird.

    Schonmal danke,
    Skar1212
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

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

  3. mach doch noch das "or die(mysql_error());" dahinter damit man sieht wo das Problem liegt.^^
  4. function db_connect()
    {
    
    $db['host'] = 'localhost';
    $db['uid'] = 'username';
    $db['pwd'] = 'password';
    $db['db'] = 'database';
    
        $db = new mysqli($db['host'], $db['uid'], $db['pwd'], $db['db']) or die('Verbindungsfehler!');
        if(mysqli_connect_errno()){
            echo "Fehler: Verbindung konnte nicht hergestellt werden.";
        }
        return $db;
    }
    
    $db = db_connect();
    
    $sql = "insert news (id, titel, news, autor, datum, sprache) values ('7', 'titel', 'news', 'autor', '2010-09-10', 'de')";
    $result = $db->query($sql);
    $num = $db->affected_rows;


    Versuch es mal so, ich mag mysqli lieber und die $db->affected_rows-Abfrage ist finde ich einfacher.


    EDIT:

    mach doch noch das "or die(mysql_error());" dahinter damit man sieht wo das Problem liegt.^^


    Die Verbindung klappt ja, selbst der Eintrag in die DB haut hin.

    Beitrag zuletzt geändert: 10.9.2010 23:11:24 von vertico
  5. Autor dieses Themas

    s******2

    nwage schrieb:
    mach doch noch das "or die(mysql_error());" dahinter damit man sieht wo das Problem liegt.^^


    Ok, dann kommt, aber:
    Duplicate entry '7' for key 'id'


    Das ist auch klar, weil die Spalte id unique ist.

    Und die genaue Fehler beschreibung steht nur darunter wenn der eintrag 2x vorhanden ist.
    Sonst steht die normale Meldung dort.

    vertico schrieb:

    Versuch es mal so, ich mag mysqli lieber und die $db->affected_rows-Abfrage ist finde ich einfacher.


    Danke für den Code, aber ich würde trotzdem gerne wissen, warum es nicht funktioniert.:smile:

    Normalerweiße klappt das immer:frown:

    Beitrag zuletzt geändert: 10.9.2010 23:14:49 von skar1212
  6. Ich bin zwar müde, aber das sollte noch gehen:

    1. id würde ich auf auto_increment setzen und beim Insert dann auslassen
    2. Um den Ursprungsfehler reproduzieren zu können, musst du auf jeden Fall eine neue Spalte anlegen, von mir aus mit id 8 - Denn dass der Fehler jetzt angezeigt wird, ist logisch.

    Ursprungsfehler wird jedoch ein Syntaxfehler im Insert sein:

    $sql = mysql_query("INSERT INTO news (id, titel, news, autor, datum, sprache) VALUES (7, 'titel', 'news', 'autor', '2010-09-10', 'de')");


    1. es heißt INSERT INTO
    2. Die id wird ohne Hochkomma eingefügt

    Beitrag zuletzt geändert: 11.9.2010 8:25:49 von fabo
  7. xD auf das INTO hab ich letzte Nacht auch nicht geachtet und sogar noch seinen Query fehlerhaft kopiert. Ich hätte ne Idee Lima: Postsperre von Code nach 22 Uhr als Müdigkeitsschutz ^^
  8. Autor dieses Themas

    s******2

    fabo schrieb:
    Ich bin zwar müde, aber das sollte noch gehen:

    1. id würde ich auf auto_increment setzen und beim Insert dann auslassen
    2. Um den Ursprungsfehler reproduzieren zu können, musst du auf jeden Fall eine neue Spalte anlegen, von mir aus mit id 8 - Denn dass der Fehler jetzt angezeigt wird, ist logisch.

    Ursprungsfehler wird jedoch ein Syntaxfehler im Insert sein:

    $sql = mysql_query("INSERT INTO news (id, titel, news, autor, datum, sprache) VALUES (7, 'titel', 'news', 'autor', '2010-09-10', 'de')");


    1. es heißt INSERT INTO
    2. Die id wird ohne Hochkomma eingefügt

    Erstmal danke für den auto_increment typ, so eine Funktion hab ich schon lange gesucht.

    aber ich bin trotzdem immer noch am verzweifeln.
    es geht nicht
  9. Wenn die id auto_increment ist, lass die id weg. MySQL erhöht den Wert bei jedem INSERT automatisch um 1.

    Duplicate entry '7' for key 'id'

    Der Fehler sagt, dass eine ID 7 schon vorhanden ist, also kannst du sie nicht nochmal anlegen.
  10. Autor dieses Themas

    s******2

    chatter schrieb:
    Wenn die id auto_increment ist, lass die id weg. MySQL erhöht den Wert bei jedem INSERT automatisch um 1.

    Duplicate entry '7' for key 'id'

    Der Fehler sagt, dass eine ID 7 schon vorhanden ist, also kannst du sie nicht nochmal anlegen.


    Ja, aber das ist ja nicht das Problem. Das war nur weil ich id immer mit 7 geschrieben habe.

    Aber auch wenn ich immer andere Zahlen verwende kommt die Fehlermeldung:
    Warning: mysql_affected_rows() expects parameter 1 to be resource, string given in C:\xampp\htdocs\arcanum\test.php on line 6


    Was ja, ziemlich seltsam ist, da der eitnrag ja in der Datenbank gespeichert wird.

    Die Fehlermeldung kommt trotzdem
  11. So, jetzt wird die Wahrheit ausgepackt. Es nervt mich tierisch, dass PHP ausgerechnet an dieser Stelle falsch dokumentiert ist. Die Funktion mysql_query() liefert nicht immer eine Ressource zurück, sondern im Fehlerfall auch eine Boolesche Variable mit dem Wert false. Da es einen Fehler gibt und du nicht prüfst, ob dir mysql_query() false zurück gibt, oder ob alles glatt lief, wird false als Parameter an mysql_affected_rows() übergeben. Dies wirft den Fehler, der in der Fehlermeldung auch sehr ordentlich definiert ist, weswegen ich mich wundere, wie es hier so viele falschen Antworten geben konnte. Alle Antworten, bis auf die von Fabo und der meinigen gehören gelöscht.

    @TE: Bitte tue, was Fabo dir gesagt hat: Schreibe "INSERT INTO", dann müsste der Fehler verschwinden. Und aus
    $num = mysql_affected_rows($sql);
    machst du bitte
    if($sql)
        $num = mysql_affected_rows($sql);
    else
        die('Fehler im Query!');


    Beitrag zuletzt geändert: 11.9.2010 22:47:24 von drafed-map
  12. Autor dieses Themas

    s******2

    drafed-map schrieb:
    @TE: Bitte tue, was Fabo dir gesagt hat: Schreibe "INSERT INTO", dann müsste der Fehler verschwinden. Und aus
    $num = mysql_affected_rows($sql);
    machst du bitte
    if($sql)
        $num = mysql_affected_rows($sql);
    else
        die('Fehler im Query!');



    mhm, also mittlererweile glaube ich das ich zu blöd dafür bin.
    ich schaffs nicht, hier ist der ganze code:
    <?php
    mysql_connect("","user","passwort");
    mysql_select_db("arcanum");
    
    $sql = mysql_query("insert into news (id, titel, news, autor, datum, sprache) values ('', 'titel', 'news', 'autor', '2010-09-05', 'de')");
    
    if($sql)
        $num = mysql_affected_rows($res);
    else
        die('Fehler im Query!');
    ?>

    Es kommt immernoch die gleiche fehler meldung.
    Das erste Feld bei Value ist freigelassen weil auto_increment benutzt wird
  13. Z.Z. lässt du das Feld nicht frei. Du sagst: "Da kommt der String '' hin!". Da eine Zahl erwartet wird, wird aus dem String '' die Zahl 0 gemacht. Du kannst 0 aber nicht als ID setzen. Die Lösung: Wen interessiert die ID? Das lassen wir doch schön MySQL machen, wir wollen damit nichts zu tun haben. Wir haben gesagt, dass MySQL dieses Feld selbstständig mit immer größeren Ganzzahlen ausfüllen soll, und das tut es. Dabei dürfen wir ihm nicht in die Quere kommen. Hier der korrekt Code:
    <?php
    mysql_connect("","user","passwort");
    mysql_select_db("arcanum");
    
    $sql = mysql_query("insert into news (titel, news, autor, datum, sprache) values ('titel', 'news', 'autor', '2010-09-05', 'de')");
    
    if($sql)
        $num = mysql_affected_rows($res);
    else
        die('Fehler im Query!');
    ?>
  14. Autor dieses Themas

    s******2

    Ok, das mit dem auto_increment hab ich jetzt verstanden, aber die fehlermeldung bleibt:-(
  15. Das kann eigentlich garnicht sein. Sag uns mal, was var_dump($sql); ausgibt, nachdem das Query abgeschickt wurde.
  16. Autor dieses Themas

    s******2

    Ähm das ist jetzt wirklich seltsam.

    Es kommt : bool(true)

    das kann doch gar nicht sein oder?
  17. sag mal, welchen Datentyp hat dein Datum eigentlich?

    wenn ich mich recht entsinne, schreibt man in SQL Datum durch # eingeschlossen... beispiel: #12.09.2010# oder #2010-09-12#

    oder mach in der Datenbank nen String aus dem Datum, dann bekommst du am 19. Januar 2038 auch kein problem mit dem Datum^^
  18. 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!