- A Dreame három okostelefont mutatott meg Lengyelországban
- Samsung Galaxy S25 - végre van kicsi!
- Amazfit Active 2 NFC - jó kör
- Reklámok kikapcsolása Xiaomi, Redmi és Poco telefonokon
- OnePlus 9 Pro - gyorsulási futam
- Magisk
- Honor 200 Pro - mobilportré
- Sony WF-1000XM6 – ez évi etalon?
- Megtartotta Európában a 7500 mAh-t az Oppo
- Apple Watch
Ú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
- A Dreame három okostelefont mutatott meg Lengyelországban
- Gaming notebook topik
- Miért tűntek el ezek a PC-alkatrészek?
- Samsung Galaxy S25 - végre van kicsi!
- Anglia - élmények, tapasztalatok
- Windows 11
- sziku69: Fűzzük össze a szavakat :)
- Portfolio Performance - befektetések nyomonkövetése
- Építő/felújító topik
- Marathon (2025)
- További aktív témák...
- Sigma 12-24mm f/4.5-5.6 EX DG HSM
- Eladó 4GB DDR4 laptop RAM-ok (SO-DIMM) többféle órajellel ( 10 darab )
- OHH! MSI CYBORG 15 Gamer Tervező Laptop 15,6" -30% i7-13620H 10Mag 16/512 RTX 4060 8GB FHD 144Hz
- ELADÓ 4 darab 8GB DDR4 ECC Registered (RDIMM) Szerver RAM modul
- Építőipari csomag (vakológépek, targoncák, építőipari eszközök és kellékek, egyéb, sok más)
- Akciós kisWorkstation! Dell Precision 3560 i7-1165G7 4.7GHz / 16GB / 512GB / Quadro T500 2GB FHD 15"
- 164 - Lenovo Legion Pro 7 (16IRX9H) - Intel Core i9-14900HX, RTX 4090
- Új Asus Vivobook 16 WUXGA IPS Ryzen5 7430U 16GB 512GB SSD Radeon RX Vega7 Graphics Win11 Garancia
- MacBook Pro 16" M1 Max 64GB / 2TB / 27%-os ÁFÁS
- AKTIVÁLATLAN iPhone 16e 128GB Fehér -12 hónap Apple Gar - Kártya független
Állásajánlatok
Cég: Laptopműhely Bt.
Város: Budapest
Cég: Central PC számítógép és laptop szerviz - Pécs
Város: Pécs
Ami egyből be is illeszti az új sort, ha nincs olyan még.


