Insert into nem működik.

Insert into nem működik.
2019-01-08T18:36:01+01:00
2019-01-14T13:19:33+01:00
2022-08-18T23:00:35+02:00
Hutolada
Sziasztok. Az lenne a gondom,hogy valamiért nem fut le adatbázis fele ez a kód:

<?php include "szalami.php"; $ip=$_SERVER['REMOTE_ADDR']; $useragent = $_SERVER["HTTP_USER_AGENT"]; $db->query("INSERT INTO `ellenorzes` (ip, useragent, nev) values (`$ip` , `$useragent`, `$felhasznalo`)"); ?>

De var dumpra meg jó.
Mutasd a teljes hozzászólást!
Hali!

Az a poén…

Ez nem poén. Hasonlítsd már össze a var_dump()-ba rakott SQL-mondatodat a nyitó hozzászólásodban találhatóval (különös tekintettel a VALUES utáni, zárójelek közötti részre). Szerinted ugyanaz a két rész-mondat? Ugyanazok a szöveghatároló karakterek találhatók az értékek körül?

Mutasd a teljes hozzászólást!

  • Hali!

    … valamiért nem fut le…

    A hibaüzenet alapján a gond az lesz, hogy valami bibi van valahol. 

    Biztosan megfelelő az SQL-mondatod? Most lépjünk át azon, hogy az SQL-injection „melegágya”, de biztosan az értékeket szeretted volna backtick-ek (`) közé rakni (aposztrófok helyett) és nem a mezőket? 

    Mutasd a teljes hozzászólást!
  • Szia Boldog új évet.

    Az a poén ha dumpot rakok bele:

    var_dump("INSERT INTO ellenorzes (ip, useragent, nev) values ('$ip' , '$useragent', '$felhasznalo')");

    Perfekt jól kiír mindent.. phpmyadminban beviszem ott hozzáadja szépen tehát lefut.
    Mutasd a teljes hozzászólást!
  • Hali!

    Az a poén…

    Ez nem poén. Hasonlítsd már össze a var_dump()-ba rakott SQL-mondatodat a nyitó hozzászólásodban találhatóval (különös tekintettel a VALUES utáni, zárójelek közötti részre). Szerinted ugyanaz a két rész-mondat? Ugyanazok a szöveghatároló karakterek találhatók az értékek körül?

    Mutasd a teljes hozzászólást!
  • Bocsi rosszat másoltam be:
    Na így a var dump jó.

    var_dump("INSERT INTO `ellenorzes` (ip, useragent, nev) values (`$ip` , `$useragent`, `$felhasznalo`)");

    $query = mysql_query("INSERT INTO `ellenorzes` (ip, useragent, nev) values (`$ip` , `$useragent`, `$felhasznalo`)");


    /var/www/virtual/htdocs/ellenorzes.php:15: string(156) "INSERT INTO `ellenorzes` (ip, useragent, nev) values (`92.43.145.109` , `Mozilla/5.0 (Windows NT 6.1; WOW64; rv:64.0) Gecko/20100101 Firefox/64.0`, `titok`)"


    ez a sql táblám:

    CREATE TABLE `ellenorzes` (
      `id` bigint(16) NOT NULL,
      `ip` varchar(16) NOT NULL,
      `useragent` varchar(128) NOT NULL,
      `nev` varchar(16) NOT NULL,
      `date` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP
    ) ENGINE=InnoDB DEFAULT CHARSET=latin1;


    De még így sem: De a var_dump meg jó:

    <?php include "szalami.php"; $ip=$_SERVER['REMOTE_ADDR']; $useragent = $_SERVER["HTTP_USER_AGENT"]; var_dump("INSERT INTO `ellenorzes` (ip, useragent, nev) values (`$ip` , `$useragent`, `$felhasznalo`)"); $db->query("INSERT INTO `ellenorzes` (ip, useragent, nev) values (`$ip` , `$useragent`, `$felhasznalo`)"); $sb->insert_id; ?>
    Mutasd a teljes hozzászólást!
  • Talán meg kellene próbálkozni azzal, amit Netangel már javasolt:

    values (`$ip` , `$useragent`, `$felhasznalo`)

    helyett

    values ('$ip' , '$useragent', '$felhasznalo')

    írandó.

    Ha így nem megy, akkor az aposztróf helyett próbálj macskakörmöt használni.
    Mutasd a teljes hozzászólást!
  • Szia már mindegyiket kipróbáltam.

    De ha var_dumppal megy és phpmyadminban is jó akkor a php-ban miért nem ad át?

    var_dump("INSERT INTO `ellenorzes` (ip, useragent, nev) values (`$ip` , `$useragent`, `$felhasznalo`)");

    Így most próbáltam megint::

    $db->query("INSERT INTO 'ellenorzes' (ip, useragent, nev) values ('$ip' , '$useragent', '$felhasznalo')");

    Lekérem ugye az adott file-al és ott benne vannak az adatok,de mysql-ba nem írja be...
    Mutasd a teljes hozzászólást!
  • Hali!

    Így most próbáltam megint…

    És milyen hibát ad? Ha az összes meződ NOT NULL és csak a `date` mezőre van default érték beállítva, akkor az `id` mező hol/milyen értéket kap?

    Mutasd a teljes hozzászólást!
  • ellenorzes.php:8:
    string(156) "INSERT INTO 'ellenorzes' (ip, useragent, nev) values ('92.45.145.108' , 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:64.0) Gecko/20100101 Firefox/64.0', 'titok')"
    Mutasd a teljes hozzászólást!
  • Egy kicsit foglalkozz már többet (=olvass) a dolgokkal, amiket használsz/használni akarsz, de ha már minden kis hibával ide jössz, akkor legalább értelmezd a válaszokat pontosan!

    Pl. ki mondta, hogy a táblanévnél (ellenorzes) is aposztrófolj?

    Szerk: a kérdésednek amúgy melyik része kapcsolódik a C++ nyelvhez?
    Mutasd a teljes hozzászólást!
  • Ha esetleg mariadb-t használsz akkor
    DEFAULT CURRENT_TIMESTAMP is not possible
    Mutasd a teljes hozzászólást!
  • Hali!

    Ha esetleg mariadb-t használsz akkor

    Azért nézd meg azt is, hogy mikor „not possible” (súgok: jelen esetben „possible”). 

    Mutasd a teljes hozzászólást!
  • Nekem nem jött össze.
    De lehet, hogy csak bénaságból.

    Egyébként kísérlet képen tegyen be egy dátumot is az insert-be.
    Mutasd a teljes hozzászólást!
  • A kísérlet című képet ki festette?
    Mutasd a teljes hozzászólást!
  • $query = "INSERT INTO ellenorzes (ip, useragent, nev) VALUES('$ip', '$useragent', '$felhasznalo')"; mysql_query($query) or trigger_error(mysql_error()." in ".$query);
    Mutasd a teljes hozzászólást!
  • Nem hiányzik egy auto_increment az id-hoz?
    Mutasd a teljes hozzászólást!
  • Hali!

    Nekem nem jött össze.  De lehet, hogy csak bénaságból.

    Pedig az általad linkelt knowledge-base oldalon is egyértelműen leírják (maga a hibaüzenet): „The storage engine for the table doesn't support The syntax or the data type(s) is not supported by Columnstore.” A lényeget kivastagítottam – jelen esetben nem ilyen motorról van szó (hanem InnoDB). De erről te is meggyőződhetsz, ha lefuttatod a Hutolada által adott tábla-létrehozó SQL-mondatot (működni fog).

    Itt nem az a probléma. Már leírtuk (leírtam), csak Hutolada vagy nem értelmezte megfelelően, vagy nem érdekli. 
    1. A backtick (`) nem szöveg-literális határoló, hanem azonosító-határoló. Így eleve hibás a nyitó hozzászólásában mutatott SQL-mondat, mivel a VALUES-részben az értékeket backtick-karakterrel határolja aposztróf (') helyett.
    2. Minden mezője NOT NULL kitétellel rendelkezik, de csak a `date` mezőnek van alapértelmezett érték megadva. Mivel az INSERT-ben csak az `ip`, `useragent` és `nev` mezőket specifikálja (és adja meg), az `id`-t nem, így hibás lesz.

    Miben hibázott Hutolada?
    1. Nincs tisztában a szintaktikával (és nem is néz utána), de használja (ill. próbálja használni).
    2. Nincs tisztában a hibakeresés 1×1-gyel (azaz, nem vizsgálja a végrehajtott művelet sikerességét, eredményét), nem figyeli a hibaüzeneteket (mivel nem is ad lehetőséget arra, hogy legyenek).
    3. Szöveg-összeillesztéssel állítja elő az SQL-mondatot (az SQL-injekción kívül akár hibás végrehajtást is eredményezhet).
    4. Nem olvassa értőn és vagy értelmezi (megfelelően) az itt kapott válaszokat.
    5. Téves kategóriát ad meg a témájának (eredetileg C++ volt) – lényegtelen, hogy nemtörődömségből vagy félrekattintásból (habár, ez utóbbi az előbbinek „válfaja”).
    6. Stb-stb-stb…

    Mutasd a teljes hozzászólást!
  • Ok. Igazad van.
    Nálam viszont ténylegesen elő fordult, hogy egy mysql-ről maridb-be átemelt tábla
    JPA/JDBC párossal kezelve nem csinálta.
    Igaz ez nem mostanában volt.
    Mutasd a teljes hozzászólást!
  • Az adatbázis kapcsolatod rendben van?
    Vagy a $db változód csak egy üres változó, mert ha nincs db kapcsolat akkor nem fog semmi sem történni.

    $db = mysqli_connect("localhost","my_user","my_password","my_db"); // Check connection if (mysqli_connect_errno()) { echo "Failed to connect to MySQL: " . mysqli_connect_error(); }
    Mutasd a teljes hozzászólást!
  • Sziasztok. nem rosszból igazatok van. Amúgy próbáltam ,de nem találtam megoldást. Maradb-t használok. amúgy.
    Mutasd a teljes hozzászólást!
  • Hali!

    Amúgy próbáltam ,de nem találtam megoldást. 

    Nem próbálni kell, hanem megfelelően „csinálni” (Yoda-tól függetlenül). Ha már a korábbi intelmek nem segítettek:
    1. A táblád létezik?
    2. A MySQL-kapcsolat létrejön?
    3. Megosztanád a konkrét forráskódot, amivel próbálod?

    Mutasd a teljes hozzászólást!
  • $db = mysqli_connect("localhost","","",""); $ip=$_SERVER['REMOTE_ADDR']; $useragent = $_SERVER["HTTP_USER_AGENT"]; $iphost = gethostbyaddr($_SERVER['REMOTE_ADDR']); $db->query("INSERT INTO `ellenorzes` (ip, useragent, iphost, nev) values ('$ip' , '$useragent' , '$iphost' , '$felhasznalo')"); mysqli_close($link); ?>
    Mutasd a teljes hozzászólást!
  • mysqli_query($db,"INSERT INTO ellenorzes (ip, useragent, iphost, nev) values ('$ip' , '$useragent' , '$iphost' , '$felhasznalo')");
    Alapok: PHP mysqli_query() Function
    Mutasd a teljes hozzászólást!
  • Alapok:

    Semmi sem történik továbbra sem...
    Pedig a Alapok: PHP mysqli_query() Function

    Akkor most ?
    Mutasd a teljes hozzászólást!
  • Tényleg létrejön az adatbázis kapcsolatod?
    Ellenőrzöd azt valahogy?
    Mutasd a teljes hozzászólást!
  • ez a sql táblám:
    CREATE TABLE `ellenorzes` ( 
    `id` bigint(16) NOT NULL,  `
    ip` varchar(16) NOT NULL, 

    ....

    Továbbra is az a véleményem, hogy az 'id' mező mivel 'not null' legalább egy auto_increment -et tegyél a sor végére, vagy
    az insertbe adj értéket neki ha nem kell az auto increment.
    Mutasd a teljes hozzászólást!
  • Amire most írom ezt a file-t az egy meglévő rendszerre készül. Igen van kapcsolat.
    Mutasd a teljes hozzászólást!
  • Hali!

    Lassan egy hete szenvedsz ezzel a problémával, de nem sikerült közelebbi infót adnod a hibáról. Az nem elégséges, hogy „semmi sem történik továbbra sem” (nem véletlenül írtam korábban, hogy hibakeresés 1×1). 

    Mi jelenik meg, ha az INSERT-et futtató részt a következőre cseréled?
    if (!$db->query("INSERT INTO `ellenorzes` (ip, useragent, iphost, nev) values ('$ip' , '$useragent' , '$iphost' , '$felhasznalo')")) { echo $db->error; }
    Gyanúsan az `id` meződre vonatkozó hibaüzenet, de ki tudja…

    Mutasd a teljes hozzászólást!
  • Success... Localhost via UNIX socket

    $mysqli = new mysqli('localhost', '', '', ''); if ($mysqli->connect_error) { die('Connect Error (' . $mysqli->connect_errno . ') ' . $mysqli->connect_error); } if (mysqli_connect_error()) { die('Connect Error (' . mysqli_connect_errno() . ') ' . mysqli_connect_error()); } echo 'Success... ' . $mysqli->host_info . "\n"; $mysqli->close();
    Mutasd a teljes hozzászólást!
  • Megoldva:

    <?php include "szalami.php"; $db = mysqli_connect("localhost","","",""); $ip=$_SERVER['REMOTE_ADDR']; $useragent = $_SERVER["HTTP_USER_AGENT"]; $iphost = gethostbyaddr($_SERVER['REMOTE_ADDR']); $db->query("INSERT INTO `ellenorzes` (ip, useragent, iphost, nev) values ('$ip' , '$useragent' , '$iphost', '$felhasznalo')"); mysqli_close($link); ?>
    Mutasd a teljes hozzászólást!
abcd