Avatar billede mjuk Nybegynder
29. april 2011 - 09:34 Der er 4 kommentarer og
1 løsning

CREATE TABLE x2 mislykkedes

Når jeg prøver at køre følgende i PHP:

$sql = "CREATE TABLE table1
(
FirstName varchar(15)
);
CREATE TABLE tabl2
(
FirstName varchar(15)
);"

mysql_query($sql,$con) or die('Could not connect: ' . mysql_error());;

mysql_close($con);

Får jeg følgende fejlmeddelelse:
"Could not connect: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'CREATE TABLE tabl2 ( FirstName varchar(15) )' at line 5"

MYSQL 5.1.36
PHP: 5.3.0
Avatar billede erikjacobsen Ekspert
29. april 2011 - 10:54 #1
Del den op i to CREATE-sætninger, og så brug 2 gange mysql_query. Det du prøver understøttes ikke.
Avatar billede mjuk Nybegynder
29. april 2011 - 11:19 #2
Det var selvfølgelig en snild måde at omgås problemet på, men jeg skal kunne indsætte en .sql fil i php koden. Det må da kunne lade sig gøre at køre 2 gange CREATE TABLE i en forespørgsel?
Avatar billede erikjacobsen Ekspert
29. april 2011 - 12:14 #3
"Det må da kunne lade sig gøre" ... det kan jeg ikke lige se hvorfor skulle være tilfældet, når de nu fra MySqls side forsøger på at undgå det.

Mange programmer finder ud af hvor hver SQL-sætningen begynder og udfører dem een af gangen. Det er ikke nok (altid) at kigge på ";", da en tekststreng også kan indeholde semikolon. Men du kan evt kigge i kildeteksten til phpmyadmin for at se hvordan de gør - det må være der et sted.
30. april 2011 - 06:53 #4
mjuk, jeg var heller ikke klar over det.  Man kan uden problemer direkte i mysql indfoere queryen "CREATE TABLE table1(FirstName VARCHAR(15)); CREATE TABLE table2(FirstName VARCHAR(15));" og faa de to tabeller oprettet, saa jeg soegte, forgaeves, efter en maade at faa det til at virke i php.  Saa kom jeg til at taenke paa 'ordsproget' "Hvis alt andet slaar fejl, saa kik i vejledningen."  Saa jeg slog det op i http://php.net/manual/en/function.mysql-query.php og fandt:  "mysql_query() sends a unique query (multiple queries are not supported) ...." Saa ham der lavede PHP (vist nok en dansker (groenlaender)) valgte ikke at tillade multiple queries fra PHP. 

Det er muligt man kan i mssql.  I hvert fald siger http://php.net/manual/en/function.mssql-query.php ikke at mssql ikke understoetter multiple queries.

Jeg opretter dette som et svar (selv om det ikke gav det resultat du oenskede,) idet jeg mener at have hjulpet med problemet, altsaa: glem det hvis du vil bruge mysql_query.
Avatar billede erikjacobsen Ekspert
30. april 2011 - 11:31 #5
Lige for at få det på plads ;)

MySql tillader ikke mere end een query pr kald.

Klientprogrammer, som phpmyadmin, eller kommandolinieværktøjet mysql, og andre, har programmeret sig ud over dette ved at parse SQL-sætningerne, og lave eet kald pr stk.

PHP sender bare queryen videre til MySql.

MSSql tillader flere queries pr kald, men er så en smule mere usikker, hvis det lykkes at lave en SQL-injection, da man fx kan tilføje en "; DROP TABLE users".  (Nu er SQL-injection jo det nemmeste i verden at undgå, men blot for sammenligningens skyld)
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