- A Team Group SSD-je gondoskodik arról, hogy az utolsó bitig letörölhető legyen
- Maximum 320 Hz-et képes magából kipréselni a Philips dual mode-os monitora
- A TSMC gyárthatja a Nova Lake legfontosabb komponensét
- Majdnem mindenki a TSMC 2 nm-es node-jára vágyik, de van egy nagy probléma vele
- Lefőtt a júliusi hardverpárlat
- AMD Navi Radeon™ RX 9xxx sorozat
- OLED TV topic
- Milyen videókártyát?
- Majdnem mindenki a TSMC 2 nm-es node-jára vágyik, de van egy nagy probléma vele
- SSD kibeszélő
- Gaming notebook topik
- AMD Ryzen 9 / 7 / 5 7***(X) "Zen 4" (AM5)
- A TSMC gyárthatja a Nova Lake legfontosabb komponensét
- AMD K6-III, és minden ami RETRO - Oldschool tuning
- Vezetékes FEJhallgatók
Ú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
- AMD Navi Radeon™ RX 9xxx sorozat
- Formula-1
- Yutani: Yutani Retró Hangkártyái: OAK Mozart Wavetable
- Sony Xperia 1 V - kizárólag igényeseknek
- YouTube
- Az új vezér szerint már nincs a legjobb tíz chipgyártó között az Intel
- Futás, futópályák
- Mibe tegyem a megtakarításaimat?
- ricshard444: Fényképező ? Telefon helyett
- OLED TV topic
- További aktív témák...
- AKCIÓ! Sony PlayStation4 PRO 1TB fekete konzol extra játékokkal garanciával hibátlan működéssel
- Bomba ár! HP 255 G7 - AMD A4 I 4GB I 128SSD I HDMI I 15,6" FHD I Radeon I HDMI I W11 I Cam I Gari!
- NEC MultiSync V421 monitor (42") 1920 x1080px
- BESZÁMÍTÁS! ASRock B460M i5 10400 16GB DDR4 512GB SSD RTX 2060 Super 8GB Rampage SHIVA TT 500W
- Telefon felvásárlás!! Xiaomi Redmi Note 13, Xiaomi Redmi Note 13 Pro, Xiaomi Redmi Note 13 Pro+
Állásajánlatok
Cég: PCMENTOR SZERVIZ KFT.
Város: Budapest
Cég: Promenade Publishing House Kft.
Város: Budapest