Avatar billede dcheng Novice
27. september 2004 - 14:04 Der er 10 kommentarer og
1 løsning

mysql error hvad er der i vejen?

Jeg forsøger at lave et backup/restore script.. backup scriptet har jeg lavet og får en sql fil ud.. nu mangler jeg bare restore scriptet.. men den mælder false på min query hvorimod hvis jeg kører den i phpMyAdmin så virker den.. så nu er jeg rundt på gulvet??

-- restore.php --
<FORM method="post" enctype="multipart/form-data" action="restore_func.php">
    <INPUT type="file" name="sqlfile"><BR>
    <INPUT type="submit" value="Send">
</FORM>
-----------------


-- restore_func.php --
<?
include "connect.php";
$sqlfile = $_FILES['sqlfile']['tmp_name'];
$query = file_get_contents($sqlfile);
if(mysql_query($query)) {
    echo "ok";
} else {
    echo mysql_error();
    echo "<BR><BR><B>Query:</B><BR>";
    echo $query;
}
?>
----------------------


Jeg får dette i browseren
----------------------
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 brugere ( id int(4) DEFAULT '0' NOT NULL,

Query:
DROP TABLE IF EXISTS brugere; CREATE TABLE brugere ( id int(4) DEFAULT '0' NOT NULL, fornavn varchar(255) NOT NULL, efternavn varchar(255) NOT NULL, cpr varchar(6), status enum('ledig','optaget') DEFAULT 'ledig' NOT NULL, opgave int(10), tilf_dato date, dead_dato date ); INSERT INTO brugere VALUES ('0','fgadf','gaadfg','ga','ledig',NULL,NULL,NULL); INSERT INTO brugere VALUES ('0','gsdf','gsd','fg','ledig',NULL,NULL,NULL); DROP TABLE IF EXISTS opgaver; CREATE TABLE opgaver ( Id int(8) unsigned NOT NULL auto_increment, titel varchar(255) NOT NULL, beskrivelse longtext NOT NULL, tilf_dato date, PRIMARY KEY (Id) ); INSERT INTO opgaver VALUES ('1','','gweeg','2004-09-27'); INSERT INTO opgaver VALUES ('2','df','ghddfgh','2004-09-27');
----------------------
Avatar billede dcheng Novice
27. september 2004 - 14:05 #1
--- connect.php ---
mysql_connect("localhost", "root", "");
mysql_select_db("db");
-------------------
Avatar billede stois Nybegynder
27. september 2004 - 14:08 #2
Det er godt nok et rodet query, sætter det lige op så man kan læse det =)

DROP TABLE IF EXISTS brugere;

CREATE TABLE brugere ( id int(4) DEFAULT '0' NOT NULL, fornavn varchar(255) NOT NULL, efternavn varchar(255) NOT NULL, cpr varchar(6), status enum('ledig','optaget') DEFAULT 'ledig' NOT NULL, opgave int(10), tilf_dato date, dead_dato date );

INSERT INTO brugere VALUES ('0','fgadf','gaadfg','ga','ledig',NULL,NULL,NULL); INSERT INTO brugere VALUES ('0','gsdf','gsd','fg','ledig',NULL,NULL,NULL);

DROP TABLE IF EXISTS opgaver;

CREATE TABLE opgaver ( Id int(8) unsigned NOT NULL auto_increment, titel varchar(255) NOT NULL, beskrivelse longtext NOT NULL, tilf_dato date, PRIMARY KEY (Id) );

INSERT INTO opgaver VALUES ('1','','gweeg','2004-09-27'); INSERT INTO opgaver VALUES ('2','df','ghddfgh','2004-09-27');

Sådan...
Avatar billede stois Nybegynder
27. september 2004 - 14:11 #3
DROP TABLE IF EXISTS brugere;

CREATE TABLE brugere (
  id int(4) DEFAULT '0' NOT NULL,
  fornavn varchar(255) NOT NULL,
  efternavn varchar(255) NOT NULL,
  cpr varchar(6),
  status enum('ledig','optaget') DEFAULT 'ledig' NOT NULL,
  opgave int(10),
  tilf_dato date,
  dead_dato date );

INSERT INTO brugere VALUES (
  '0',
  'fgadf',
  'gaadfg',
  'ga',
  'ledig',
  NULL,
  NULL,
  NULL);

INSERT INTO brugere VALUES (
  '0',
  'gsdf',
  'gsd',
  'fg',
  'ledig',
  NULL,
  NULL,
  NULL);

DROP TABLE IF EXISTS opgaver;

CREATE TABLE opgaver (
  Id int(8) unsigned NOT NULL auto_increment,
  titel varchar(255) NOT NULL,
  beskrivelse longtext NOT NULL,
  tilf_dato date,
  PRIMARY KEY (Id) );

INSERT INTO opgaver VALUES (
  '1',
  '',
  'gweeg',
  '2004-09-27');

INSERT INTO opgaver VALUES (
  '2',
  'df',
  'ghddfgh',
  '2004-09-27');
Avatar billede stois Nybegynder
27. september 2004 - 14:14 #4
jeg tror fejlen ligger i at du bruger ' <-- ping til at afskilde din tekst og det vil sige at query egentligt ser sådan her ud:

mysql_query('INSERT INTO opgaver VALUES '1'');

Kan du se hvad der er galt her... det er somom du går ud af SQL sætningen i stedet for at skrive tekst ind i databasen..
Avatar billede stois Nybegynder
27. september 2004 - 14:15 #5
Undskyld jeg skrev tdit SQL så meget om, men jeg kan bare ikke finde hoved eller hale i det, med mindre jeg sætter det sådan der op... my bad!
Avatar billede stois Nybegynder
27. september 2004 - 14:17 #6
MySQL kan godt selv forstå at du bruge pinger " ' " i din SQL-sætning, men når du sender det på den måde, så går det galt...

Her kommer en rettelse:

-- restore_func.php --
<?
include "connect.php";
$sqlfile = $_FILES["sqlfile"]["tmp_name"];
$query = file_get_contents($sqlfile);
if(mysql_query($query)) {
    echo "ok";
} else {
    echo mysql_error();
    echo "<BR><BR><B>Query:</B><BR>";
    echo $query;
}
?>


Prøv... jeg må nu sige at jeg tror ikke på det, fordi jeg mener ikke man må bruge dobbelt ping inde i et array... men jeg ku' tage fejl
Avatar billede sostack Nybegynder
27. september 2004 - 14:17 #7
Jeg tror det er noget med dine ;'er inde midt i queryen
Prøv med:
<?
include "connect.php";
$sqlfile = $_FILES['sqlfile']['tmp_name'];
$query = file_get_contents($sqlfile);
$query2 = explode("; ", $query);
foreach($query2 AS $queryen)
{
  if(mysql_query($queryen)) {
    echo "ok";
  } else {
    echo mysql_error();
    echo "<BR><BR><B>Query:</B><BR>";
    echo $query;
  }
}
?>

Giver godt nok flere forespørgsler til serveren, men nemmere at finde fejl...!

//sostack
Avatar billede dcheng Novice
27. september 2004 - 14:32 #8
De giver allesammen samme resultater
Avatar billede dcheng Novice
27. september 2004 - 14:38 #9
Jeg tror fejlen ligger i at man ikke må have flere queries i en mysql_query prøver lige at splitte den ad.
Avatar billede dcheng Novice
27. september 2004 - 14:55 #10
Nu virker det !! Querien skal åbenbart splittes op


<?
mysql_connect("localhost", "root", "");
mysql_select_db("db");
$sqlfile = $_FILES["sqlfile"]["tmp_name"];
$query = file_get_contents($sqlfile);

$array = explode(";", $query);
$total = count($array);
$total2 = $total - 1;
$nr = 0;
while ( $nr < $total2) {
    if(mysql_query($array[$nr])) {
        echo "ok";
    } else {
        echo mysql_error();
        echo "<BR><BR><B>Query $total:</B><BR>";
        echo $query;
    }
    $nr++;
}
?>
Avatar billede dcheng Novice
29. september 2004 - 15:30 #11
lukker spm
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
Vi tilbyder markedets bedste kurser inden for webudvikling

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