php-resource



Zurück   PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr > Entwicklung > SQL / Datenbanken
 

Login

 
eingeloggt bleiben
star Jetzt registrieren   star Passwort vergessen
 

 

 


SQL / Datenbanken Probleme mit SQL? Hier könnt ihr eure Fragen zu SQL (MySQL, PostgreSQL, MS-SQL und andere ANSI-SQL Server) los werden.

Antwort
 
LinkBack Themen-Optionen Thema bewerten
  #16 (permalink)  
Alt 15-08-2003, 14:18
BrainBug
 PHP Senior
Links : Onlinestatus : BrainBug ist offline
Registriert seit: Mar 2001
Ort: Raum Frankfurt
Beiträge: 1.110
BrainBug ist zur Zeit noch ein unbeschriebenes Blatt
Standard

PHP-Code:
$dump file('pfad/zum/dump_file.sql');
for (
$i=0$i<count($dump); $i++) {
  
$sql trim($dump[$i]);
  
mysql_query($sql);
  } 
da du den Dump selbst erzeugst, solltest du darauf achten, dass keine Kommentarzeilen oder Leerzeilen vorkommen und dass der CREATE-Befehl in einer Zeile ausgeben wird. phpMyAdmin macht das nämlich nicht.
ansonsten muss man in der Schleife solche Dinge eben abfangen, also z.B.
PHP-Code:
if (substr($sql,0,1) != "#" && substr($sql,0,1) != "/" && $sql != ""mysql_query($sql); 
aufpassen mußte du auch bei Texteinträgen mit einem Umbruch (\n) drin -> beim Dump erzeugen mußt du die durch einen Backslash \ maskieren, sonst hast du da plötzlich eine neue Zeile im Dump-File.

Oder wie erzeugst du den Dump-File?

Hast du schon mal vom Rechner aus über den Prompt versucht, dich über telnet einzuloggen?
Mit Zitat antworten
freelancermap.de - IT Projektvermittlung für Selbständige und Freiberufler
  #17 (permalink)  
Alt 15-08-2003, 14:20
Kicky
 Junior Member
Links : Onlinestatus : Kicky ist offline
Registriert seit: Dec 2002
Beiträge: 95
Kicky ist zur Zeit noch ein unbeschriebenes Blatt
Standard

ich gestehe ich weiss nicht mal wie ich das anstellen soll mich über telnet einzuloggen. (Schamesröte)

Gruß Kicky
Mit Zitat antworten
  #18 (permalink)  
Alt 15-08-2003, 14:25
Kicky
 Junior Member
Links : Onlinestatus : Kicky ist offline
Registriert seit: Dec 2002
Beiträge: 95
Kicky ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Meinen Dump erstelle ich folgendermassen:

PHP-Code:

// Struktur der Tabelle einlesen

    
unset($def,$index);
    
$def .= "DROP TABLE IF EXISTS $tabellenname;\r\n";
    
$def .= "CREATE TABLE $tabellenname (\r\n"
    
$result3 mysql_db_query($database"SHOW FIELDS FROM $tabellenname");
    while (
$row mysql_fetch_array($result3)) {
        
$def .= "    ".$row["Field"]." ".$row["Type"];
        if (
$row["Default"] != "") { $def .= " DEFAULT '".$row["Default"]."'"; }
        if (
$row["Null"] != "YES") { $def .= " NOT NULL"; }
        if (
$row["Extra"] != "") { $def .= " ".$row["Extra"]; }
        
$def .= ",\r\n";
    }
    
$def ereg_replace(",\r\n$"""$def);
    
$result3 mysql_db_query($database"SHOW KEYS FROM $tabellenname");
    while (
$row mysql_fetch_array($result3)) {
        
$kname $row["Key_name"];
        if ((
$kname != "PRIMARY") && ($row["Non_unique"] == 0)) { $kname "UNIQUE|".$kname; }
        if (!isset(
$index[$kname])) { $index[$kname] = array(); }
        
$index[$kname][] = $row["Column_name"];
    }
    while (list(
$xy$columns) = each($index)) {
        
$def .= ",\r\n";
        if (
$xy == "PRIMARY"$def .= "    PRIMARY KEY (".implode($columns", ").")";
        else if (
substr($xy,0,6) == "UNIQUE"$def .= "    UNIQUE ".substr($xy,7)." (".implode($columns", ").")";
        else 
$def .= "    KEY $xy (".implode($columns", ").")";
    }
    
$def .= "\r\n);\r\n\r\n";

// Ende Struktur Modul
    
$db mysql_select_db($database);
    
$tabelle "".$tabelle;
    
$text "#\r\n# Daten für Tabelle `$tabellenname`\r\n#\r\n\r\n";

    
$fd fopen($file_name,"a+"); 
    
fwrite($fd$text.$def); 
    
fclose($fd);

    unset(
$data);
    if (
$tabelle "") {
        
$ergebnis[] = mysql_select_db($database);
        
$result mysql_query("SELECT * FROM $tabellenname");
        
$anzahl mysql_num_rows($result);
        
$spaltenzahl mysql_num_fields($result);
        for (
$i 0$i $anzahl$i++) {
            
$zeile mysql_fetch_array($result);
            
$data .= "INSERT INTO $tabellenname (";
            for (
$spalte 0$spalte $spaltenzahl$spalte++) {
                
$feldname mysql_field_name($result$spalte);
                if (
$spalte == ($spaltenzahl 1)) {
                    
$data.= $feldname;
                } else {
                    
$data.= $feldname.",";
                }
            }
            
$data .= ") VALUES (";
            for (
$k=0;$k $spaltenzahl;$k++) {
                if (
$k == ($spaltenzahl 1)) {
                    
$data .= "'".addslashes($zeile[$k])."'";
                } else {
                    
$data .= "'".addslashes($zeile[$k])."',";
            }
            }
            
$data .= ");\r\n";
        }
        
$data .= "\r\n";
    } else {
        
$ergebnis[] = "Keine Tabelle übergeben";
    } 
Gruß Kicky
Mit Zitat antworten
  #19 (permalink)  
Alt 15-08-2003, 14:37
BrainBug
 PHP Senior
Links : Onlinestatus : BrainBug ist offline
Registriert seit: Mar 2001
Ort: Raum Frankfurt
Beiträge: 1.110
BrainBug ist zur Zeit noch ein unbeschriebenes Blatt
Standard

so müßte eigentlich der Dump ohne überflüssige Kommentare und Leerzeilen erzeugt werden. Dann wird auch die recht schlichte Version des Auslesens funktionieren.
PHP-Code:
// Struktur der Tabelle einlesen

    
unset($def,$index);
    
$def .= "DROP TABLE IF EXISTS $tabellenname;\r\n";
    
$def .= "CREATE TABLE $tabellenname ("
    
$result3 mysql_db_query($database"SHOW FIELDS FROM $tabellenname");
    while (
$row mysql_fetch_array($result3)) {
        
$def .= "    ".$row["Field"]." ".$row["Type"];
        if (
$row["Default"] != "") { $def .= " DEFAULT '".$row["Default"]."'"; }
        if (
$row["Null"] != "YES") { $def .= " NOT NULL"; }
        if (
$row["Extra"] != "") { $def .= " ".$row["Extra"]; }
        
$def .= ", ";
    }
    
$def substr($def,0,-2); // letztes ", " abschneiden
    
$result3 mysql_db_query($database"SHOW KEYS FROM $tabellenname");
    while (
$row mysql_fetch_array($result3)) {
        
$kname $row["Key_name"];
        if ((
$kname != "PRIMARY") && ($row["Non_unique"] == 0)) { $kname "UNIQUE|".$kname; }
        if (!isset(
$index[$kname])) { $index[$kname] = array(); }
        
$index[$kname][] = $row["Column_name"];
    }
    while (list(
$xy$columns) = each($index)) {
        
$def .= ", ";
        if (
$xy == "PRIMARY"$def .= "    PRIMARY KEY (".implode($columns", ").")";
        else if (
substr($xy,0,6) == "UNIQUE"$def .= "    UNIQUE ".substr($xy,7)." (".implode($columns", ").")";
        else 
$def .= "    KEY $xy (".implode($columns", ").")";
    }
    
$def .= ");\r\n";

// Ende Struktur Modul
    
$db mysql_select_db($database);
    
$tabelle "".$tabelle;
    
//$text = "#\r\n# Daten für Tabelle `$tabellenname`\r\n#\r\n\r\n";

    
$fd fopen($file_name,"a+"); 
    
fwrite($fd$def); 
    
fclose($fd);

    unset(
$data);
    if (
$tabelle "") {
        
$ergebnis[] = mysql_select_db($database);
        
$result mysql_query("SELECT * FROM $tabellenname");
        
$anzahl mysql_num_rows($result);
        
$spaltenzahl mysql_num_fields($result);
        for (
$i 0$i $anzahl$i++) {
            
$zeile mysql_fetch_array($result);
            
$data .= "INSERT INTO $tabellenname (";
            for (
$spalte 0$spalte $spaltenzahl$spalte++) {
                
$feldname mysql_field_name($result$spalte);
                if (
$spalte == ($spaltenzahl 1)) {
                    
$data.= $feldname;
                } else {
                    
$data.= $feldname.",";
                }
            }
            
$data .= ") VALUES (";
            for (
$k=0;$k $spaltenzahl;$k++) {
                if (
$k == ($spaltenzahl 1)) {
                    
$data .= "'".addslashes($zeile[$k])."'";
                } else {
                    
$data .= "'".addslashes($zeile[$k])."',";
            }
            }
            
$data .= ");\r\n";
        }
        
$data .= "\r\n";
    } else {
        
$ergebnis[] = "Keine Tabelle übergeben";
    } 
Mit Zitat antworten
  #20 (permalink)  
Alt 15-08-2003, 14:41
BrainBug
 PHP Senior
Links : Onlinestatus : BrainBug ist offline
Registriert seit: Mar 2001
Ort: Raum Frankfurt
Beiträge: 1.110
BrainBug ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
Original geschrieben von Kicky
ich gestehe ich weiss nicht mal wie ich das anstellen soll mich über telnet einzuloggen. (Schamesröte)
ja, ab in die Ecke und schäm dich.

wenn du einen Windows-Rechner hast, dann über den Prompt ("Start" > "Ausführen" > eingeben "cmd" > Fenster geht auf) einfach folgender Befehl:

telnet URL_von_deinem_webspace

und abwarten. Wenn telnet überhaupt möglich, dann wird nach dem User und dem Passwort gefragt -> User und Passwort müßte dann das von deinem Account sein. Falls nicht, sagt dir das Programm, dass der Connect nicht möglich ist. Dann war's schade.

P.S.: wirklich NUR die Url, NICHT mit http:// eingeben
Mit Zitat antworten
  #21 (permalink)  
Alt 15-08-2003, 14:45
Kicky
 Junior Member
Links : Onlinestatus : Kicky ist offline
Registriert seit: Dec 2002
Beiträge: 95
Kicky ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Ganz lieben Dank,

da werde ich mich erst einmal durchwühlen. Ich werde mich melden wenn es funktioniert - und wenn nicht wohl auch.

Gruß Kicky
Mit Zitat antworten
  #22 (permalink)  
Alt 15-08-2003, 14:49
BrainBug
 PHP Senior
Links : Onlinestatus : BrainBug ist offline
Registriert seit: Mar 2001
Ort: Raum Frankfurt
Beiträge: 1.110
BrainBug ist zur Zeit noch ein unbeschriebenes Blatt
Talking okay

klaro, mach das.

Ich bin vermutlich erst wieder am Montag im Forum unterwegs.
Bis dann und schönes Wochenende (falls wir uns in den nächsten 1-2 Stunden nichts mehr schreiben )
Mit Zitat antworten
  #23 (permalink)  
Alt 18-08-2003, 15:20
Kicky
 Junior Member
Links : Onlinestatus : Kicky ist offline
Registriert seit: Dec 2002
Beiträge: 95
Kicky ist zur Zeit noch ein unbeschriebenes Blatt
Standard

@ BrainBug


Hallo,

ich hoffe Du hattest ein erholsames Wochenende. Zuerst noch mal lieben Dank für Deine Unterstützung am Freitag. Es ist unglaublich aber wahr, es funktioniert jetzt fast! Fast leider nur deswegen. Ich weiss immer noch nicht wie ich es löse wenn jemand etwas in die DB eingiebt mit breaks. Der User giebt etwas in eine Textarea ein. Wie bekomme ich die (sie sind ja mittendrinnen) nun raus um im dump alles in einer Zeile zu haben. Hast du dafür noch eine Idee für mich? Danke vorab ich werde auch weiter nach einer Lösung für dieses hoffentlich letzte Problem in dieser Angelegenheit suchen. Also so long

Kicky
Mit Zitat antworten
  #24 (permalink)  
Alt 18-08-2003, 15:35
BrainBug
 PHP Senior
Links : Onlinestatus : BrainBug ist offline
Registriert seit: Mar 2001
Ort: Raum Frankfurt
Beiträge: 1.110
BrainBug ist zur Zeit noch ein unbeschriebenes Blatt
Standard

hmm, ich dachte eigentlich, dass das mit dem addslashes() ausreichen würde. Scheinbar nicht...

probier's mal so

PHP-Code:
$dump file('pfad/zum/dump_file.sql');
$sql="";
for (
$i=0$i<count($dump); $i++) {
  
$sql .= trim($dump[$i]);
  if (
substr($sql,0,6)=="INSERT" && substr($sql,-4)==");\r\n") {  
    
mysql_query($sql);
    
$sql="";
    }
  } 
die if-Abfrage prüft, ob die Zeile mit dem INSERT-Befehl beginnt und auch mit dem korrekten Abschluss endet. Falls nicht, wird der SQL-Query ausgelassen und der nächste Array-Eintrag an den bestehenden String angehängt, und zwar solange, bis das INSERT-Zeilenende kommt. Bin mir nicht sicher, ob die Abfrage nach den Steuerzeichen so funktioniert. Einfach mal testen...

P.S.: Wochenende war mal wieder zukurz für all das, was ich vor hatte. Aber trotzdem erholsam, danke der Nachfrage
Mit Zitat antworten
  #25 (permalink)  
Alt 18-08-2003, 15:59
Kicky
 Junior Member
Links : Onlinestatus : Kicky ist offline
Registriert seit: Dec 2002
Beiträge: 95
Kicky ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Herzlichen Dank für deine super schnelle Antwort.

Die Abfrage nach den Steuerzeichen funktioniert so leider nicht. Ich bin am überlegen ob es auch an meiner Eingabe in die DB liegen kann. Ob ich da nicht schon etwas abfangen kann. Der User muss zwar die möglichkeit haben Zeilenumbrüche zu machen, aber ich bin gerade am schauen ob ich das anders einbauen muss damit es korrekt ist und auch wieder ausgelesen werden kann. Die Anzeige im Browser ist ok, aber eben nicht beim einlesen des dumps. Wenn ich einen Eintrag ohne Zeilenumbrüche habe wird er einwandfrei eingelesen.


Gruß Kicky
Mit Zitat antworten
  #26 (permalink)  
Alt 18-08-2003, 16:08
Kicky
 Junior Member
Links : Onlinestatus : Kicky ist offline
Registriert seit: Dec 2002
Beiträge: 95
Kicky ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Ich habe es noch einmal geprüft und das Problem scheint nur aufzutreten, wenn bei der Eingabe in dei DB die returntaste genutzt wird. Dann liest er mir den dum nicht mehr wieder ein. Ich vermute also das das einspielen des Dumpes ok ist und ich bei der Eingabe in die db bzw. beim erstellen des dumpes diese Situation berücksichtigen muss.

Kannst du mir kurz bestätigen ob ich mit diesem Gedankengang richtieg liege? Meine Güte wie lernen andere Leute so etwas?? Oder ich stelle mich besonders dusselig an.

Danke für alles

Gruß Kicky
Mit Zitat antworten
  #27 (permalink)  
Alt 18-08-2003, 17:58
Kicky
 Junior Member
Links : Onlinestatus : Kicky ist offline
Registriert seit: Dec 2002
Beiträge: 95
Kicky ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Unglaublich aber wahr!!!!!!!
Es funktioniert!!!!!!!

Ich wollte mich nur noch einmal von Herzen bedanken und hoffe ich bekommme jetzt keine Rechnung für privatstunden. Ich bin noch einmal unseren gesamten Thread von Freitag durchgegangen und habe gegrübelt. Dann fiel es mir wie Schuppen von den Augen und ich habe es mit

PHP-Code:
addcslashes() 
versucht. Siehe da, das hat funktioniert.
In meinem Eifer am Freitag hatte ich völlig vergessen Dir zu sagen das der Telnet-zugang nicht möglich war. Also noch einmal super herzlichen Dank

Gruß Kicky
Mit Zitat antworten
  #28 (permalink)  
Alt 19-08-2003, 11:18
BrainBug
 PHP Senior
Links : Onlinestatus : BrainBug ist offline
Registriert seit: Mar 2001
Ort: Raum Frankfurt
Beiträge: 1.110
BrainBug ist zur Zeit noch ein unbeschriebenes Blatt
Standard

gern geschehen.

und Abrechnungen über Privatstunden gibt es hier nicht. Das ist alles in der Pauschale drin, die du mir bitte sofort und ohne Abzug auf mein Konto überweist

Ciao
BrainBug
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an


PHP News

PHP Marktplatz-Software
PHP Marktplatz-SoftwareEs hat sich viel getan! Die neue Version 7.5.9 unserer PHP Marktplatz-Software ebiz-trader steht ab sofort zur Verfügung.

28.10.2019 | Berni

Die RIGID-FLEX-Technologie
Die RIGID-FLEX-TechnologieDie sogenannte "Flexible Elektronik" , oftmals auch als "Flexible Schaltungen" bezeichnet, ist eine zeitgemäße Technologie zum Montieren von elektronischen Schaltungen.

06.12.2018 | Berni


 

Aktuelle PHP Scripte

SMT

Server Monitoring & Management Tool Das SMT wurde von einem Administrator für Administratoren entwickelt, es vereinfacht den Alltag in der klassischen Administration und Verwaltung. Mit dem SMT kannst Du alle Deine Server & Dienste verwalten und überwach

04.09.2020 palle_1977 | Kategorie: PHP
numaeks Web-Farbmixer

Die RGB-Farben lassen sich hier auf unterschiedliche Weise mischen. Zur Einstellung werden auch die Dreh- und Schieberegler mit Canvas verwendet. Gespeichert werden die Farben in einem Cookie.

04.09.2020 numaek | Kategorie: JAVASCRIPT/ Tools
phplinX-Erotikportal 4 ansehen phplinX-Erotikportal 4

Erweiterbares Portal speziell für Erotik mit den Modulen Webkatalog, Bannermanagement und Kleinanzeigenmarkt. Sämtliche Module können über einen einzigen Adminbereich verwaltet werden.

18.06.2020 Cosinus14 | Kategorie: PHP/ Anzeigenmarkt
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 12:54 Uhr.