[PHP][MYSQL] Database backup script "Unknown column '8' in "

Pagina: 1
Acties:
  • 1.024 views sinds 30-01-2008

  • GewoonNico
  • Registratie: April 2003
  • Laatst online: 07:02
Ik heb het volgende script in elkaar gefabriceerd:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
<?
/*****************************************************************************
 *
 *  Copyright            : Copyright (C) Nico Habets
 *  Email                : nhabets <at> xs4all.nl
 *  
 *  
 *  Disclaimer:
 *  Niets uit dit script mag zonder toestemming van de maker van deze
 *  scripting gekopieerd, of doorverkocht worden aan derden. De maker van deze
 *  scripting blijft ten alle tijden copyright op dit product houden. De 
 *  scripting is ter beschikking gesteld door Nico Habets.
 *  Dit programma is GEEN vrije software, en mag niet worden doorverkocht en/
 *  of gewijzigd worden tenzij de eigenaar toestemming hiervoor heeft verleend
 *
 *****************************************************************************/
if (!defined("INCMS"))      { die("Hacking Attempt!"); }
if (!defined("LOGGEDIN"))   { die("Hacking Attempt!"); }

ob_clean();
header("Content-type: Application/octet-stream"); 
header("Content-Disposition: attachment; filename=DB Dackup ".date("Y-m-d").".sql"); 

$tables = mysql_list_tables($dbname);
while($table = mysql_fetch_row($tables))
    {
    $getrecords = mysql_query("SELECT * FROM ".$table[0].""); 
    $getfields = mysql_query("SELECT * FROM ".$table[0]." LIMIT 1"); 
    while($record = mysql_fetch_object($getrecords)) 
        {
        $countfields = mysql_num_fields($getfields);
        $field = 0;
        $inbackup .= "INSERT INTO ".$table[0]." (";
        while($field < $countfields) 
            { 
            if ($field <> 0) 
                { 
                $inbackup .= ",".mysql_field_name($getfields, $field)."";
                }
            else 
                { 
                $inbackup .= "".mysql_field_name($getfields, $field)."";
                }
            $field++;
            }
        $inbackup .= ") VALUES(";
        $field = 0; 
        while ($field < $countfields) 
            { 
            $fieldname = mysql_field_name($getfields, $field); 
            if ($field <> 0) 
                { 
                $inbackup .= ", `".stripslashes($record->$fieldname)."`";
                } 
            else 
                { 
                $inbackup .= "`".stripslashes($record->$fieldname)."`";
                } 
            $field++; 
            } 
        $inbackup .= ");\r\n";
        $rules++; 
        } 
    }
  
  echo($inbackup);
die();
?>


Het script kan direct worden aangeroepen als een link (bijv ?pid=main/backup) en vervolgens wordt je gevraagd of je het bestand wilt downloaden.
Werkt perfect.

Een kleinbeetje output ziet er als volgt uit:
SQL:
1
2
3
4
INSERT INTO album (id,id_site,id_event,id_category,id_image,no_login,pic_row,pic_col,pic_thumb_w,pic_thumb_h,pic_orig_w,pic_orig_h,name,message) VALUES(`8`, `3`, `0`, `15`, `0`, `0`, `5`, `5`, `80`, `60`, `800`, `600`, `westelijke mijnstreek`, `De westelijke mijnstreek staat bekend om de vele mijnschachten. Kijk hier voor een aantal luchtfoto's.`);
INSERT INTO album (id,id_site,id_event,id_category,id_image,no_login,pic_row,pic_col,pic_thumb_w,pic_thumb_h,pic_orig_w,pic_orig_h,name,message) VALUES(`7`, `3`, `0`, `15`, `0`, `0`, `5`, `5`, `80`, `60`, `800`, `600`, `parkstad limburg`, `Een groot aantal foto's uit parkstad limburg vind u hier. Klik snel en bekijk deze prachtige foto's!`);
INSERT INTO album (id,id_site,id_event,id_category,id_image,no_login,pic_row,pic_col,pic_thumb_w,pic_thumb_h,pic_orig_w,pic_orig_h,name,message) VALUES(`9`, `3`, `0`, `15`, `0`, `0`, `5`, `5`, `80`, `60`, `800`, `600`, `regio maastricht`, `Ook in de regio van Maastricht kunnen mooie foto's worden gemaakt. Hier een overzicht.`);
INSERT INTO album (id,id_site,id_event,id_category,id_image,no_login,pic_row,pic_col,pic_thumb_w,pic_thumb_h,pic_orig_w,pic_orig_h,name,message) VALUES(`10`, `3`, `0`, `15`, `0`, `0`, `5`, `5`, `80`, `60`, `800`, `600`, `regio roermond`, `Welkom in regio Roermond. Aanschouw hier prachtige Roermondse luchtfoto's. `);


Zelf zie ik hier geen fouten in... Alleen Mysql pakt deze code niet...
ik krijg de volgende foutmelding:

code:
1
#1054 - Unknown column '8' in 'field list'


Wat ik natuurlijk heel vreemd vind, en er na 3 uur kloten nog niet uit kom. Ik heb al geprobeerd om die cijfers niet tussen quotes te zetten, maar dat helpt ook niet.
Wie kan mij vertellen wat ik fout heb gedaan ?

[ Voor 6% gewijzigd door GewoonNico op 28-12-2004 16:52 . Reden: emailadres veranders ivm spambots ]


  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

`backtics` gebruik je alleen om de veldnamen heen, niet om de values, daar gebruik je de 'single quote'

  • GewoonNico
  • Registratie: April 2003
  • Laatst online: 07:02
Ziet er al beter uit, Alleen dan krijg ik de volgdende foutmelding:

code:
1
2
#1064 - 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 's.');
INSERT INTO album (id,id_site,id_event,id_category,id_ima


Dit komt doordat er wel eens een ' wordt gebruikt in de tekst. Hoe kan ik dit oplossen ?

  • _reboot_
  • Registratie: December 2004
  • Laatst online: 26-04 16:29
Dan zit er nog een fout in een vorige insert query... De laatse ` wel verwijderd?

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 11:43

gorgi_19

Kruimeltjes zijn weer op :9

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Dit topic is gesloten.