Vinnaren i pepparkakshustävlingen!
2006-11-07, 14:10
  #1
Medlem
Lyckholms avatar
Hej,

Jag försöker lagra PHP-object i en MySQL-databas, men det verkar inte fungera riktigt. Vad är en lämplig approach egentligen?

Jag serialiserar först objekten med serialize(). Resultatet lagrar jag i databasen som en longblob. MySQL-koden för att lagra objekten ser ut så här:

$res = $db->Query("REPLACE INTO TheTable SET theEmail='".$acc->_emailAddress."', theObj='".$serObj."'");

... där $serObj är det serializerade objektet. Ovanstående går bra (Query returnerar TRUE). Men när jag plockar ur objektet är det NULL. Så här plockar jag ur det:

$q = $db->Query("SELECT theEmail,theObj FROM TheTable WHERE theEmail='".$email."'");

Primary key är theEmail.

Hur skulle ni gjort? Något ovan är fel. Frågan är vad. Kanske något i create-satserna? Är LONGBLOB lämpligt? Kan/ska man skriva det serialiserade objektet inom enkelcitat '' (som en sträng) om man skriver det till databasen som en LONGBLOB?
Citera
2006-11-07, 14:29
  #2
Medlem
äppelkakas avatar
Citat:
Ursprungligen postat av Lyckholm
Hej,

Jag försöker lagra PHP-object i en MySQL-databas, men det verkar inte fungera riktigt. Vad är en lämplig approach egentligen?
En lämplig approach är att använda en ORM-mapper, och eftersom det inte verkar finnas någon vettig sådan för PHP (efter snabb googling) så är en mycket lämplig approach att byta till Java eller .NET innan du blir för fäst vid PHP.

ORM står för Object Relational Mapping, och gör att du slipper skriva massa jobbigt SQL för att spara och läsa ut objekt ur databasen. Plus mycket annat trevligt.
Citera
2006-11-07, 17:38
  #3
Medlem
Citat:
Ursprungligen postat av äppelkaka
En lämplig approach är att använda en ORM-mapper, och eftersom det inte verkar finnas någon vettig sådan för PHP (efter snabb googling) så är en mycket lämplig approach att byta till Java eller .NET innan du blir för fäst vid PHP.

ORM står för Object Relational Mapping, och gör att du slipper skriva massa jobbigt SQL för att spara och läsa ut objekt ur databasen. Plus mycket annat trevligt.

Då kan jag berätta att det säkert finns uppemot 100 olika sådana för PHP. Men för all del, byt du till Java eller .NET. Vem sjutton vill slippa betala dyra licensavgifter, eller binda sig till en specifik plattform!?
Citera
2006-11-07, 18:25
  #4
Medlem
äppelkakas avatar
Citat:
Ursprungligen postat av kungdenknege
Då kan jag berätta att det säkert finns uppemot 100 olika sådana för PHP. Men för all del, byt du till Java eller .NET. Vem sjutton vill slippa betala dyra licensavgifter, eller binda sig till en specifik plattform!?
Finns säkerligen 100, frågan är om det finns en enda värd namnet? Länka gärna till någon som är ungefär lika sofistikerad som t.ex. Hibernate.

En googling på php orm gav dessa två citat på första resultatsidan.

"Many of us in desperate search for good ORM tools for PHP end up finding existing PHP persistence packages are either insufficient to address the problems ..."

"None of the php orm's are even close to feature rich enough to do everything youll want them to do in a complex system but the top ORMs in my opinion right ..."

Detta i kombination med en titt på den första google-träffen http://wiki.cc/php/Object_Relational_Mapping kändes som tillräckligt för att konstatera att det inte finns någon vettig ORM för PHP. Men som sagt, visa gärna motsatsen.
Citera
2006-11-07, 18:26
  #5
Medlem
Balthazaer-s avatar
Då serialize är en vanlig textsträng så behöver du inte LONGBLOB, utan TEXT duger alldeles utmärkt.
Har du kört addslashes eller mysql_real_escape på texten innan du försöker använda den i queryn?
Fånga upp eventuella fel från mysql så tror jag det löser sig.
Citera

Stöd Flashback

Flashback finansieras genom donationer från våra medlemmar och besökare. Det är med hjälp av dig vi kan fortsätta erbjuda en fri samhällsdebatt. Tack för ditt stöd!

Stöd Flashback