Avatar billede learner Praktikant
12. januar 2007 - 15:24 Der er 16 kommentarer og
1 løsning

Opgradering af mysql fra 4.0 til 4.1 ved surftown

Hej, jeg har mine sider ved surftown og de opdaterer lige nu mysql fra version 4.0 til 4.1

Jeg har fået følgende vejledning af surftown:
http://surftown.dk/images/500000/newsletter/MySqlnews.html

Jeg er lidt bekymret om der er nogle af mine koder (nok mest queries) der skal ændres? Derfor vil jeg bede om hjælp med at kigge lidt på det.

1) Er der generelt noget som jeg skal tjekke? skal jeg feks rette CHAR(8) til CHAR(10) eller andre generelle ting?

Jeg har fundet følgende tabeller/koder/quiries som måske skal ændres:

først lidt om databasen:
CREATE TABLE `usertable` (
  `regdate` date NOT NULL default '0000-00-00',
  `act` varchar(8) NOT NULL default '',
  `name` varchar(50) NOT NULL default '',
  `country` tinyint(3) unsigned NOT NULL default '0',
  `place` varchar(30) NOT NULL default '',
  `lastlogin` datetime NOT NULL default '0000-00-00 00:00:00',
  `lastchange` timestamp(14) NOT NULL
) TYPE=MyISAM ;

og så en quiry:
mysql_query("SELECT * FROM usertable WHERE (TO_DAYS(NOW())-TO_DAYS(lastchange))>10 AND (TO_DAYS(NOW())-TO_DAYS(lastchange))<20 AND act != '1'")

og en mere quiry:
mysql_query("UPDATE usertable SET lastlogin = '".date("Ymd His")."' WHERE name = '$name' ")


lidt om næste database:
CREATE TABLE `wan` (
  `dato` timestamp(14) NOT NULL,
  `id` int(10) unsigned NOT NULL default '0',
  `how_long` tinyint(3) unsigned NOT NULL default '0',
  `which` char(3) NOT NULL default '',
  `brugersid` smallint(5) unsigned NOT NULL default '0',
  PRIMARY KEY  (`id`),
  KEY `which` (`which`)
) TYPE=MyISAM;

mysql_query("SELECT dato FROM wan WHERE (TO_DAYS(NOW())-TO_DAYS(dato))<$how_long AND id='$wan_id' ")

mysql_query("SELECT dato FROM wan WHERE (TO_DAYS(NOW())-TO_DAYS(dato))<$how_long AND id='$wan_id' ")

mysql_query("SELECT * FROM wan WHERE (TO_DAYS(NOW())-TO_DAYS(dato))<how_long AND which='$which' ORDER BY dato ")



lidt om næste db:
CREATE TABLE `regnskabet` (
  `dato` timestamp(14) NOT NULL,
  `id` mediumint(8) unsigned NOT NULL default '0',
  `ialt_pris` mediumint(9) NOT NULL default '0',
  `valuta` varchar(5) NOT NULL default '',
  `antal_varer` mediumint(8) unsigned NOT NULL default '0',
  `kvitt` text NOT NULL
) TYPE=MyISAM;

mysql_query("SELECT dato FROM regnskabet WHERE id='$brugers_id' ORDER BY dato DESC")
while ($Array = mysql_fetch_array($Query)){
  echo substr($Array['dato'],6,2)."/".substr($Array['dato'],4,2)."-".substr($Array['dato'],2,2);
}



lidt om næste database:
CREATE TABLE `wanwarned` (
  `id` int(10) unsigned NOT NULL default '0',
  `dato` timestamp(14) NOT NULL,
  KEY `id` (`wantsid`)
) TYPE=MyISAM;

mysql_query("SELECT * FROM wanwarned WHERE (TO_DAYS(NOW())-TO_DAYS(dato))>$runtime AND id='$wan_id'")



CREATE TABLE `told_kurser` (
  `valutaid` varchar(4) NOT NULL default '',
  `kurs` decimal(6,2) NOT NULL default '0.00',
  `fra_dato` varchar(8) NOT NULL default ''
) TYPE=MyISAM;

$dato_idag = date("Y").date("m").date("d");
mysql_query("SELECT kurs FROM told_kurser WHERE valutaid='$valutaid' AND fra_dato<='$dato_idag' ORDER BY fra_dato DESC ")




Jeg håber at en ekspert kan hjælpe mig med at vurdere om jeg skal ændre noget. Eller om jeg skal ændre i mine php koder.

Jeg kunne forestille mig at jeg måske skal lave en:
if (version==4.0){
  mysql_query(...
} else if (version==4.1){
  mysql_query(...
}

På forhånd mange tak :o)
Avatar billede arne_v Ekspert
12. januar 2007 - 16:41 #1
kan du ikke installere 4.1 paa din egen PC og teste hvordan det koerer der ?
Avatar billede learner Praktikant
12. januar 2007 - 18:55 #2
Det tror jeg sku ik jeg kan finde ud af. Jeg har aldrig leget med egen server før.

Men er forskellen ik relativ lille fra 4.0 til 4.1 ?
Avatar billede arne_v Ekspert
12. januar 2007 - 19:24 #3
det er nu ikke saa svaert

----

de har tilfoejet en masse vaesentlige features

men jeg kan ikke umiddelbart komme i tanke om noget som skulle breake eksisterende kode
Avatar billede learner Praktikant
12. januar 2007 - 22:53 #4
okay dejlig nok :o)
Jeg havde lidt en mistanke om at datatime og timestamp ændringer ville ha indflydelse på de queries men det mener du ik.

Det skal nemlig helst virke, for ellers risikerer jeg at den spammer brugerne for vildt, for det kode er i scripts der sender mails ud. :o)

Og jeg kan godt forstå noget af den besked på engelsk om forskellene osv, men ik det hele, så det er derfor jeg spør :o)
Avatar billede arne_v Ekspert
13. januar 2007 - 02:34 #5
de ændrede vist noget med display format for tid

umiddelbart synes jeg ikke at det burde ændre noget i en applikation, men
man skal aldrig sige aldrig

du bør nok lige bruge en halv time på at teste det
Avatar billede learner Praktikant
16. januar 2007 - 12:02 #6
jeg prøver at kigge på det. Mon ik der kan laves et script som selv tilretter sig når der skiftes version.

Kan man ik lave en:
if (version==4.0){
} else if (version==4.1){
}
Avatar billede arne_v Ekspert
17. januar 2007 - 01:18 #7
mysql_get_server_info() kan ihvertfald hente versionen
Avatar billede learner Praktikant
19. januar 2007 - 15:14 #8
okay tak

jeg har kigget lidt på det og tror kun at der kan komme problemer med de nye datoformater

feks har jeg forstået det sån at timestamp
der før blev
20070116035226
bliver
2007-01-16 03:52:26

Men er det ik ligegodt om det er det ene eller det andet, og om nogle af felterne er skrevet på den nye måde og andre på den gamle måde, hvis man laver en:
WHERE (TO_DAYS(NOW())-TO_DAYS(dato))>$runtime

jeg vil da skyde på at TO_DAYS(2007-01-16 03:52:26) giver det samme som TO_DAYS(20070116035226)
tror du ik?

:o)
Avatar billede arne_v Ekspert
20. januar 2007 - 02:05 #9
jep

mysql> select TO_DAYS('2007-01-16 03:52:26'),TO_DAYS('20070116035226');
+--------------------------------+---------------------------+
| TO_DAYS('2007-01-16 03:52:26') | TO_DAYS('20070116035226') |
+--------------------------------+---------------------------+
|                        733057 |                    733057 |
+--------------------------------+---------------------------+
1 row in set (0.00 sec)
Avatar billede learner Praktikant
20. januar 2007 - 22:44 #10
cool nok, hvordan gjorde du det :o)
Avatar billede learner Praktikant
21. januar 2007 - 02:11 #11
hmmm vil det betyde noget for denne:
where xxx... ORDER BY dato DESC
Mit gæt er at det er samme som før
Avatar billede arne_v Ekspert
21. januar 2007 - 02:15 #12
fuldstændigt
Avatar billede learner Praktikant
21. januar 2007 - 02:54 #13
gudi, så er alt fixet og det skulle køre :o)
ahhh så kan man ånde lettet op :o)
Det er sku altid lidt spændende om der går helt kuk i den :o)

Takker
Smid et svar
Avatar billede learner Praktikant
21. januar 2007 - 02:56 #14
det eneste jeg skulle ændre var:
echo substr($Array['dato'],6,2)."/".substr($Array['dato'],4,2)."-".substr($Array['dato'],2,2);

skulle ændres til:
echo substr($Array['dato'],8,2)."/".substr($Array['dato'],5,2)."-".substr($Array['dato'],2,2);
Avatar billede arne_v Ekspert
21. januar 2007 - 03:02 #15
lyder jo godt
Avatar billede learner Praktikant
21. januar 2007 - 03:29 #16
jaaaaaahhhh :o)
Så nu nyder jeg et glas rødvin og hýgger :o) skål!
Avatar billede arne_v Ekspert
17. marts 2007 - 21:16 #17
jeg smider et svar
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester