PHP PDO lastInsertId tamsayı yerine dize döndürür

0 Cevap php

Ben şu anda bir symfony / doktrin app inşa ediyorum ve bir modeli aşağıdaki yapıya sahiptir:

Session:
  columns:
    session_id:
      type: integer(8)
      primary: true
      autoincrement: true
    session_number:
      type: string(30)

: Bu, doğru olarak veritabanına eşler

CREATE TABLE `session` (
  `session_id` bigint(20) NOT NULL AUTO_INCREMENT,
  `session_number` varchar(30) NOT NULL,

Yani biz orada güvenlidir.

Yeni bir kayıt oluşturmak için çalışırken sonra kod gider:

$newSession = new Session();
$newSession->session_number = session_id();
$newSession->save();
//...
echo $newSession->session_id; //<------ this will return a string '1'

Son satırı problemlidir. Session_id alan son kimlik değeri ile doldurulur, ancak as a string!! olur

Bu yüzden ilk başta, ben doktrin suçlu olduğunu düşündüm, ama sonra kod hata ayıklama, ben PDO aslında bir dize olarak değer döndüren biri gibi görünüyor öğrendim. Çağrılan bir yöntemdir:

dbh->lastInsertId()

Yani bariz soru: how can I solve this?. Ben internette bunları buldum ama onları henüz denemedim:

  1. PDO :: ATTR_STRINGIFY_FETCHES. Bu çalışır mı? Eğer evet ise, bunu nasıl yapılandırabilirsiniz?
  2. Mysql yerli sürücüsünü yerine pdo kullanma. Ben bile yapılandırabilirsiniz emin değilim böylece Ancak doktrin işler.
  3. (Int) $ session-> session_id: diğer belirgin geçici int typecasting etmektir. Ama bu bir tamsayı değer döndürür gerektiği gibi bu sadece düz çirkin (ki pdo ve doktrin kullanarak tüm amacı bu!) Ve tüm diğer modellerde aynı sorunu olurdu.
  4. Bu ne için en iyi çözüm olurdu?

0 Cevap