Hirdetés
- Sub-ZeRo: Euro Truck Simulator 2 & American Truck Simulator 1 (esetleg 2 majd, ha lesz) :)
- D1Rect: Nagy "hülyétkapokazapróktól" topik
- sziku69: Fűzzük össze a szavakat :)
- Luck Dragon: Asszociációs játék. :)
- Őskoczka
- sziku69: Szólánc.
- GoodSpeed: A megfelelő matrac kiválasztása egy hosszú folyamat végén!
- urandom0: Száműztem az AI-t az életemből
- bb0t: Ikea PAX gardrób és a pokol logisztikája
- bambano: Bambanő háza tája
Új hozzászólás Aktív témák
-
Sk8erPeter
nagyúr
válasz
pakriksz
#14968
üzenetére
"Mint írtam, ha nincs benne azonos sor, akkor hozzá kell adni! Így az update nem jó ide."
Bocs, igazad van, én voltam a hülye, kevertem a REPLACE INTO ... SET ...-szintaktikával...
Ami egyből be is illeszti az új sort, ha nincs olyan még.
De tulajdonképpen előnyt nem hoz ahhoz képest, amit most használsz, szóval a korábbit, amit írtam az UPDATE-tel kapcsolatban, inkább felejtsd el, bullshit, visszavonom."» "INSERT INTO stats (ip, user, downloads) VALUES (:userip, :user, 1)
ON DUPLICATE KEY UPDATE downloads = downloads + 1"
Erre már ír hibát, méghozzá hogy "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 ':userip, :user, 1) ON DUPLICATE KEY UPDATE downloads = downloads + 1' at line 1""
Azért az jó, hogy kihangsúlyoztam, hogy ezt direkt PDO prepared statement-es szintaktikával írtam, és hogy nézd meg, amit itt írtam...
Nyilvánvaló, hogy ez így nem fog működni, amíg nem megfelelő módon használod.
A :userip-nek és a :user-nek a query-ben szükséges egy megfeleltetés, értéket kell adni neki a query előkészítése után, így működnek a prepared statementek. Előnyük, hogy az SQL Injection általuk nem lehetséges.
Direkt azért linkeltem be azt a hsz.-emet, mert ott írtam példákat, hogy lehet átírni PDO-sra a lekéréseket.
De akkor berakom neked ide is, a saját példádhoz igazítva (ha el nem írom):
// csatlakozás
$db = new PDO(
'mysql:host=localhost;dbname=test_db', // test_db-t módosítsd a megfelelő adatbázisnévre
'root', // módosítsd
'1234', // módosítsd
array(
PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES UTF8;', // egyből UTF-8-ra fogja állítani kapcsolódás után a karakterkódolást
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, // kivételeket fog dobálni probléma esetén
)
);
$query = 'INSERT INTO stats (ip, user, downloads) VALUES (:userip, :user, 1)
ON DUPLICATE KEY UPDATE downloads = downloads + 1';
$stmt = $db->prepare ( $query );
$stmt->bindValue( ':userip', $userip );
$stmt->bindValue( ':user', $user );
$stmt->execute();ez fog dobni egy exceptiont, amit try-catch-blokkal kellene lekezelned. A [B]rowCount[/B]-metódusra ez vonatkozik:
http://hu1.php.net/manual/en/pdostatement.rowcount.php#109891
"Daniel Karp ¶1 year ago
Note that an INSERT ... ON DUPLICATE KEY UPDATE statement is not an INSERT statement, rowCount won't return the number or rows inserted or updated for such a statement. For MySQL, it will return 1 if the row is inserted, and 2 if it is updated, but that may not apply to other databases."Tehát ha a korábbi kód után írsz egy ilyet:
$affected_rows = $stmt->rowCount();
Akkor ezek szerint MySQL esetén az $affected_rows 1-et fog tartalmazni, ha új sor lett beszúrva, illetve 2-t, ha update-elve lett egy korábban már beillesztett sor.
Így ellenőrizheted, mi a query-d eredménye.
Új hozzászólás Aktív témák
- Elemlámpa, zseblámpa
- AMD Ryzen 9 / 7 / 5 9***(X) "Zen 5" (AM5)
- Hogy is néznek ki a gépeink?
- Vezeték nélküli fülhallgatók
- Sub-ZeRo: Euro Truck Simulator 2 & American Truck Simulator 1 (esetleg 2 majd, ha lesz) :)
- Kuponkunyeráló
- Villanyszerelés
- D1Rect: Nagy "hülyétkapokazapróktól" topik
- Automata kávégépek
- Xiaomi 14T Pro - teljes a család?
- További aktív témák...
- Dell Inspiron 3511 /i7-1165G7/MX350/16GB/512GB M.2/WIN11/Újszerű akku/Játékra is!
- Apple MacBook Air 13 M2 8/256GB Éjfekete , 96%-os akku
- Garmin Instinct 3 50mm Solar narancssárga
- Lenovo Thinkpad E14 G4 I5-1235u/16 GB/256 NVMe /14" FULL HD gyári garanciás magyar laptop eladó
- VELBON Ultra Stick Super 8 - 8 szekciós ultrakönnyű monopod
- LED Neon kötél 5 méter 8W/méter / 12 hó jótállás
- 5G Lenovo ThinkPad P14s Gen 3 Intel Core i7-1280P Nvidia T550 32GB 512GB 1 év teljeskörű garancia
- Apple iPhone Air Space Black 256 GB Használt, újszerű 100% akku / 7 ciklus 2026. 09.25
- LG OLED & OLED evo Televíziók -30%
- BESZÁMÍTÁS! ASUS ROG STRIX B460 i7 10700 16GB DDR4 1TB SSD RTX 5060 8GB NZXT S340 fehér CM 600W
Állásajánlatok
Cég: ATW Internet Kft.
Város: Budapest
Cég: BroadBit Hungary Kft.
Város: Budakeszi
Ami egyből be is illeszti az új sort, ha nincs olyan még.

