mysqli tablolarını ve REPLACE INTO

3 Cevap php

Ben aşağıdaki kodu var:

http://www.nomorepasting.com/getpaste.php?pasteid=22987

PHPSESSID tablosunda zaten değilse sorgu REPLACE INTO, gayet güzel çalışıyor ancak PHPSESSID başarılı yürütmek için çağrı var ancak sqlstate Errno ve $ _mysqli_session_write-> çok yararlı ve $ _mysqli_session_write-> değil 'HY000' olarak ayarlanırsa, hata her ikisi de boş ve veri sütunu güncelleştirmek değil.

Ben manuel olarak ne olursa olsun tablo değildir PHPSESSID ait olmadığı çalışıyor mysql DEĞİŞTİR INTO yürütme, sorun bir yerde benim komut olduğundan oldukça eminim.

3 Cevap

Çıkıyor gibi Yani ben farkında değildi DEĞİŞTİR kullanarak diğer konular vardır:

Bug #10795: REPLACE reallocates new AUTO_INCREMENT (Hangi yorumlarına göre aslında bir hata ama 'beklenen' bir davranış değildir)

Sonuç olarak benim id alanı böylece daha iyi bir çözüm çizgisinde bir şey kullanmak için artırılır, almaya devam ediyor:

YİNELENEN KEY GÜNCELLEME veri AÇIK oturumda (PHPSESSID, veri) VALUES ('{$ id}', '{$ veri}') INSERT INTO = '{$ veri}'

Bu da veri bütünlüğü sorunlara neden kırma ve potansiyel herhangi bir yabancı anahtar kısıtlamaları önler.

Neden sizin oturumu açık fonksiyonun hazırlamak yapmaya çalışıyorsun? Ben bu yüzden sizin için çok yapmaz açık onu hazırlarken, yazma işlevi bir oturumu sırasında daha sonra bir kez denir inanmıyorum, siz de o yapabilir, oturum write.

Neyse ben tablo adından sonra bazı boşluk gerektiğine inanıyorum, ve sütun listesinden önce. Nerede oturumu adlı varolmayan function () çağırmak için çalışıyor sanki boşluklarla olmadan ben mysql hareket edeceğini inanıyorum.

REPLACE INTO session (phpsessid, data) VALUES(?, ?)


MySQL sees no difference between 'COUNT ()' and 'COUNT()'

Ben mysql CLI altında çalıştırdığınızda İlginç, ben farklı bir sonuç almak gibi.

mysql> select count (*);
ERROR 1064 (42000): 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 '*)' at line 1
mysql> select count(*);
+----------+
| count(*) |
+----------+
|        1 | 
+----------+
1 row in set (0.00 sec)

"REPLACE INTO" executes 2 queries: first a "DELETE" then an "INSERT INTO". (So a new auto_increment is "By Design")

Ben de) bir MySQLi-> hazırlamak yerine) (benim veritabanı oturumları için, ama ben MySQLi-> real_escape_string ile birlikte) (MySQLi-> sorgu kullanarak ediyorum "REPLACE INTO" (kullanıyorum