CruellaDeVille Skrevet 11. juni 2006 Del Skrevet 11. juni 2006 Lager et installskript og skal få php til å opprette tabeller og sette inn data i mysql. Men - jeg får noen "rare" feilmeldinger. Koden min gjør alt på en gang, først dropper den tabeller hvis den finnes, så oppretter den tabellen på nytt og så setter den inn data. Men mysql klager og sier jeg har feil i mysql-syntaks near ; (skilletegnet mellom kommandoene i spørringen) Er det virkelig ikke lov å gjøre flere ting sekvensielt fra php til mysql? statements som create database cms; use cms;<enter> er fullstendig lovlig i konsollet, så jeg syns det er rart at det ikke går fra php. I de fire øverste statment i kode (se nedenfor) har jeg delt spørringen, dette godtar mysql. Noen som har en fornuftig forklaring? Kode, hvis noen er interessert (utdrag, fortsetter i samme retning helt til slutten): $sql = "create database {$conf['db_name']}"; $db->insert($sql); // oppretter databasen, går fint $sql = "use {$conf['db_name']}"; $db->insert($sql); // går fint $db->connect(); $sql = "DROP TABLE IF EXISTS {$conf['db_prefix']}article"; $db->insert($sql); $sql = " CREATE TABLE {$conf['db_prefix']}article ( id int unsigned auto_increment,\n title varchar(150) NOT NULL, summary text NOT NULL, body text, author int NOT NULL, PRIMARY KEY ( id ), KEY title ( title ) ) ENGINE=InnoDB DEFAULT CHARSET=latin1; INSERT INTO {$conf['db_prefix']}article VALUES ('', 'first page', 'my first articletitle', 'some mor content, article body', 1); DROP TABLE IF EXISTS {$conf['db_prefix']}user; CREATE TABLE {$conf['db_prefix']}user ( id int unsigned NOT NULL auto_increment, username varchar(50) not NULL, password varchar(150) not NULL, accesslevel int(2) not NULL, PRIMARY KEY ( id ) ) ENGINE=InnoDB DEFAULT CHARSET=latin1; INSERT INTO {$conf['db_prefix']}user VALUES (1, 'sivh', '261209735c676374479d4ada702ee2b0', 1); DROP TABLE IF EXISTS {$conf['db_prefix']}userlevel; CREATE TABLE {$conf['db_prefix']}userlevel ( id int(1) NOT NULL, title varchar(30) not NULL, PRIMARY KEY ( id ) ) ENGINE=InnoDB DEFAULT CHARSET=latin1; Lenke til kommentar
NH Skrevet 11. juni 2006 Del Skrevet 11. juni 2006 mysql funksjonene og mysql 4.x støtter ikke SQL komandoer adskilt med semikolon. For dette må du bruke mysqli funksjonene til PHP5. Om det går med mysql5x og mysql funksjonene har jeg aldri prøvd,p Lenke til kommentar
930A0029225AA4C28B8EF095B679285EAAE27078 Skrevet 11. juni 2006 Del Skrevet 11. juni 2006 Du splitter den rett og slett.. $sqlArray = explode(";", $sql); foreach($sqlArray as $value) { mysql_query($sql); } Den vil sende alle i $sql'en din Lenke til kommentar
Nervetattoo Skrevet 11. juni 2006 Del Skrevet 11. juni 2006 mysql funksjonene og mysql 4.x støtter ikke SQL komandoer adskilt med semikolon. For dette må du bruke mysqli funksjonene til PHP5. Om det går med mysql5x og mysql funksjonene har jeg aldri prøvd,p 6285632[/snapback] Det høres veldig merkelig ut, særlig når jeg har skrevet skript som har samlet opp 500 spørringer av gangen og kjørt de på dette viset med mysql4/php4. Lenke til kommentar
930A0029225AA4C28B8EF095B679285EAAE27078 Skrevet 11. juni 2006 Del Skrevet 11. juni 2006 Trudde ikke mysql_query støttet mer en en spørring uansett. Det er snakk om PHP'en her! Databasen takler det nok. mysqli_query derimot. eller. hmm er på blåbærtur. *sove* Lenke til kommentar
Peter Skrevet 11. juni 2006 Del Skrevet 11. juni 2006 (endret) If you need to execute sevaral SQL commands in a row (usually called batcg SQL) using PHP you canot use mysql_query() since it can execute single command only. Here is simple but effective function that can run batch SQL commands. Take cere, if string contains semicolon ( anywhere except as command delimiter (within string expression for example) function will not work. function mysql_exec_batch ($p_query, $p_transaction_safe = true) { if ($p_transaction_safe) { $p_query = 'START TRANSACTION;' . $p_query . '; COMMIT;'; }; $query_split = preg_split ("/[;]+/", $p_query); foreach ($query_split as $command_line) { $command_line = trim($command_line); if ($command_line != '') { $query_result = mysql_query($command_line); if ($query_result == 0) { break; }; }; }; return $query_result; } Endret 11. juni 2006 av Nazgul Lenke til kommentar
Nervetattoo Skrevet 12. juni 2006 Del Skrevet 12. juni 2006 If you need to execute sevaral SQL commands in a row (usually called batcg SQL) using PHP you canot use mysql_query() since it can execute single command only. 6289328[/snapback] Hva faen, jeg har jo gjort akkurat dette. Samlet opp 500 spørringer av gangen og kjørte de samlet i et skript som gjør noen av de faste prisguide-oppdateringene. Men men, om det feiler for trådstarter så får hun bare gjøre det på en slik måte ja. Synes bare dette er veeldig merkelig. Lenke til kommentar
Peter Skrevet 12. juni 2006 Del Skrevet 12. juni 2006 Don't shoot the messenger... Kan ha noe med PHP-versjon, hva vet vel jeg. Måten han gjør det på i den kommentaren er vel mye bedre såvidt jeg har forstått uansett, dvs. å bruke transaksjoner. Lenke til kommentar
Jonhoo Skrevet 12. juni 2006 Del Skrevet 12. juni 2006 Funker ikke hos meg å kjøre flere queries i en mysql_query() kommando heller :S Lenke til kommentar
930A0029225AA4C28B8EF095B679285EAAE27078 Skrevet 12. juni 2006 Del Skrevet 12. juni 2006 Nei jeg har fått melding fra en erfaren en om at det ikke går første gang jeg prøvde at jeg måtte splitte det på kommaet - Sikker på at du brukte mysql_query? Og ikke en sql klasse som noen andre hadde skrevet som sjekket dette? (if(instr(.... Lenke til kommentar
Jonhoo Skrevet 12. juni 2006 Del Skrevet 12. juni 2006 (endret) Hmm.. Rare greier.. Jaja.. Klarte meg nå uten, så er ikke noe problem lengre, men kjekt å vite til senere Endret 12. juni 2006 av Jonhoo Lenke til kommentar
Jonhoo Skrevet 13. juni 2006 Del Skrevet 13. juni 2006 Hvis det forsatt skulle være aktuelt, så er det visstnok ikke mulig å kjøre flere queries i én call til mysql_query().. Kilder (Se spesielt replies): http://forums.mysql.com/read.php?52,65708,65708 http://www.zend.com/phorum/read.php?num=3&...=0&thread=37973 http://www.dmcinsights.com/phorum/read.php?5,3832 http://www.ashleyit.com/blogs/brentashley/...es-in-one-call/ http://joseph.randomnetworks.com/archives/...o-php-security/ (Se teksten i den første boksen) Jon(hoo) Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå