Gå til innhold

tabelloppretting fra php til mysql


Anbefalte innlegg

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
Videoannonse
Annonse
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
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 av Nazgul
Lenke til kommentar
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

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

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...