php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2006

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 06.12.2006, 16:36  
Benutzer
 
Registriert seit: 22.05.2006
Beiträge: 32
Lloyd Larkin
Standard MySQL Befehle aus Datei lesen

Hallo PHP Friends

Ich habe wieder mal ein Problem bei dem ich nicht weiter komme.
Und zwar habe ich die MySQL Befehle zum Anlegen der Tabelle während des Setup in der Datei create_tables.sql liegen. Diese möchte ich nun einlesen und über mysql_query($sql) an die Datenbank senden.
Allerdings funktioniert das nicht, der Query scheint leer zu sein.

Die Datei lese ich wie folgt ein und schicke sie zur Datenbank:
PHP-Code:
// Textdatei laden
$datei "create_tables.sql";
$fp fopen($datei"r");
$sql fread($fpfilesize($datei));

$result mysql_query($sql) OR
   die(
"Query: <pre>".$sql."</pre>\n".
        
"Antwort: ".mysql_error());
                        
fclose($fp); 
Als Fehler bekomme ich:
Code:
Query: 
CREATE TABLE Konten 
( 
    ID     INT AUTO_INCREMENT PRIMARY KEY,  
    Titel  VARCHAR(60), 
    Stand  TEXT 
);

CREATE TABLE Einnahmen
(
    ID        INT AUTO_INCREMENT PRIMARY KEY,
    Datum     DATETIME,
    Betrag    INT,
    Text      TEXT,
    Kategorie VARCHAR(60)
);
Antwort: 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 Einnahmen ( ID INT AUTO_INCREMENT PRIMARY KEY, ' at line 6
Meine create_tables.sql schaut so aus:
Code:
CREATE TABLE Konten 
( 
    ID     INT AUTO_INCREMENT PRIMARY KEY,  
    Titel  VARCHAR(60), 
    Stand  TEXT 
);

CREATE TABLE Einnahmen
(
    ID        INT AUTO_INCREMENT PRIMARY KEY,
    Datum     DATETIME,
    Betrag    INT,
    Text      TEXT,
    Kategorie VARCHAR(60)
);
An was könnte das liegen? Ich hoffe ihr könnt mir wieder mal weiter helfen
Grüsse
Lloyd[/code]
__________________
The only thing to do with good advice is pass it on. It is never any use to oneself.
- Oscar Wilde -
Lloyd Larkin ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 06.12.2006, 16:56  
Benutzer
 
Registriert seit: 22.05.2006
Beiträge: 32
Lloyd Larkin
Standard

Danke für die Antwort.
Ah, packt das MySQL noch nicht? :wink:
In dem Fall muss ich für jedes CREATE TABLE einen eigenen Query senden, richtig?
Wie würdet ihr das lösen, möchte alle CREATE TABLE der Übersicht halber gerne in der gleichen Datei haben.

Soll ich den String mittels explode nach einem Trennzeichen (z.B. ; ) absuchen oder gibt es noch eine praktischere Möglichkeit?

EDIT: Also ich hätte wetten können da stand vor einer Minute noch eine Antwort über mir...
__________________
The only thing to do with good advice is pass it on. It is never any use to oneself.
- Oscar Wilde -
Lloyd Larkin ist offline  
Alt 06.12.2006, 18:11  
¯\_(ツ)_/¯
 
Benutzerbild von Flor1an
 
Registriert seit: 18.06.2008
Beiträge: 8.814
PHP-Kenntnisse:
Fortgeschritten
Flor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer Anblick
Standard

Also wenn du davon ausgehen kannst dass IN dem CREATE TABLE Statement bzw. in der ganzen Datei KEINE ; Semikolon vorkommen außer natürlich am Ende eines Statements dann würde ich es nach dem ; aufsplitten und einzeln absenden!
__________________
▇█▓▒░◕‿‿◕░▒▓█▇
Flor1an ist offline  
Alt 06.12.2006, 18:33  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 34.241
PHP-Kenntnisse:
Fortgeschritten
nikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz sein
Standard

möglich wäre auch ein explode nach ); ;\n
oder preg_split nach #\)\s*;\040*[\n\r]# oder dergleichen. Die fehlende Klammer muss man dann wieder ergänzen...
nikosch ist offline  
Alt 06.12.2006, 19:10  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard

Hallo,
ich habe vor kurzem das selbe Problem gehabt, es ging um eine install.sql, die bestimmte Tabellen anlegen sollte.
Bei meinen Statements gab es keine ; innerhalb eines gültigen CREATE-Statements. Es könnte allerdings der Fall sein (DEFAULT ';'), allerdings erweitere ich meine Funktion erst, wenn es mal tatsächlich nötig sein sollte.


PHP-Code:
<?php
// created 26.10.2006 14:53:50
////////////////////////////////////////////////////////////////////////////////////////////////////

require_once _PATH_COMMON_CLASSES.'File.php';

////////////////////////////////////////////////////////////////////////////////////////////////////

define('SQLDUMP_FILENOTREADABLE', -2);
define('SQLDUMP_PARTLY',          -1);
define('SQLDUMP_FAILED',           0);
define('SQLDUMP_COMPLETE',         1);
define('SQLDUMP_FILEEMPTY',        2);
 
////////////////////////////////////////////////////////////////////////////////////////////////////

/**
 * destination database must be selected (and of course connected)
 * @return  int  see sqldump constants
 */
function SQLDump($sSQLFilename$rConnection)
{
    if (!
File::isReadable($sSQLFilename)) {
        return 
SQLDUMP_FILENOTREADABLE;
    }
    
    
$aStatements explode(';'File::getContents($sSQLFilename));
    
$iError $iSuccess 0;
    for (
$i 0$iMax count($aStatements); $i $iMax$i++) {
        
$sStatement trim($aStatements[$i]);
        if (!empty(
$sStatement)) {
            if (@
mysql_query($sStatement$rConnection)) {
                
$iSuccess++;
            } else {
                
$iError++;
            }
        }
    }
    
    if (
$iError == 0) {
        if (
$iSuccess 0) {
            return 
SQLDUMP_COMPLETE;
        } else {
            return 
SQLDUMP_FILEEMPTY;
        }
    } else {
        if (
$iSuccess 0) {
            return 
SQLDUMP_PARTLY;
        } else {
            return 
SQLDUMP_FAILED;
        }
    }
}

////////////////////////////////////////////////////////////////////////////////////////////////////
?>
Ersetz einfach die Aufrufe meiner File-Klasse durch is_readable() bzw. file_get_contents().
Zergling-new ist offline  
Alt 06.12.2006, 19:47  
Benutzer
 
Registriert seit: 22.05.2006
Beiträge: 32
Lloyd Larkin
Standard

Danke euch allen für die Antwort Ich bin ziemlich sicher es wird ';' sonst nicht gebraucht.

Habe das ganze jetzt so gelöst (ohne Fehlerbehandlung):
PHP-Code:
$file "create_tables.sql";
fp fopen($file"r");
$sql fread($fpfilesize($file));            
fclose($fp);
            
$sqlArr explode(";"$sql);
            
foreach (
$sqlArr as $sqlElem) {
    
mysql_query($sqlElem);

Grüsse
__________________
The only thing to do with good advice is pass it on. It is never any use to oneself.
- Oscar Wilde -
Lloyd Larkin ist offline  
Alt 07.12.2006, 10:51  
Erfahrener Benutzer
 
Registriert seit: 13.08.2007
Beiträge: 1.976
KingCrunch befindet sich auf einem aufstrebenden Ast
KingCrunch eine Nachricht über ICQ schicken KingCrunch eine Nachricht über AIM schicken KingCrunch eine Nachricht über MSN schicken KingCrunch eine Nachricht über Yahoo! schicken
Standard

Ich kenn jetz das Problem nich im Detail, weil ja das eine Lösungsposting fehlt

Bin mir net ganz sicher, aber eigentlich müsste man doch auch bei MySQL über Transaktionen keine Probleme geben. Vorher mit BEGIN Transaktion starten, dann (wie du es ursprünglich vorhattest) Datei abarbeiten und hinterher mit COMMIT bestätigen. Is auch abhängig von der Version und wie gesagt: Sicher bin ich mir auch net ^^
__________________
Nicht jeder Fehler ist ein Bug.
KingCrunch ist offline  
Alt 07.12.2006, 11:39  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard

Musst trotzdem alles einzeln per (mysql_)Query abschicken.
Zergling-new ist offline  
Alt 07.12.2006, 11:53  
Erfahrener Benutzer
 
Registriert seit: 23.08.2007
Beiträge: 1.510
M3g4Star befindet sich auf einem aufstrebenden Ast
Standard

Aber hat mysql_query dolche probleme mit "doppelten" SQL Beefehlen ???

Weil mein PHPMyAdmin macht das ohne Probleme. ..

Zitat:
EDIT: Also ich hätte wetten können da stand vor einer Minute noch eine Antwort über mir...
Hast recht hab ihc aber nahc dem Testen mit phpMyAdmin wieder raus genommen da es dort ja klappt.

Aber wenns wirklich nicht geht dann mach das mit explode wenn's nun mal so klappt. Obwohl mich das interessierne würde wie das phpMyAdmin macht ....
*hm* Ich glaub ich kuck mal nach




So nahc einiger kleinerer Sucherei folgendes Ergebnis.

phpMyAdmin macht das auch so.. Zwar etwas ausgiebiger aber an sich genauso. Will mich da jetzt auch nciht reinlesen. Aber Fakt ist die senden einen Query nach dem Anderen...
M3g4Star ist offline  
Alt 07.12.2006, 12:27  
Erfahrener Benutzer
 
Registriert seit: 13.08.2007
Beiträge: 1.976
KingCrunch befindet sich auf einem aufstrebenden Ast
KingCrunch eine Nachricht über ICQ schicken KingCrunch eine Nachricht über AIM schicken KingCrunch eine Nachricht über MSN schicken KingCrunch eine Nachricht über Yahoo! schicken
Standard

Jetz ma faul nachgefragt: Gibs dazu denn kein fertiges Workaround? Würd mich wundern, wenn das Problem neu is ^^
__________________
Nicht jeder Fehler ist ein Bug.
KingCrunch ist offline  
 


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine 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
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
PHP-Mailer mit Protokoll MySQL oder Datei??? winkelsbr PHP Tipps 2008 3 04.07.2008 12:52
Großer Baum -> Große Datei -> Hohe Ladezeit :( PsychoEagle PHP Tipps 2008 7 22.09.2007 12:44
Datei generierung aus MYSQL DB silverghost PHP Tipps 2006 4 15.05.2006 10:00
MySQL Fehler nach Änderung einer PHP Datei mark007q Datenbanken 2 09.05.2006 23:56
CSV Datei in MySQL importieren phpler1609 PHP Tipps 2006 6 23.03.2006 14:48
Datei durchsuchen Wöllchen Beitragsarchiv 3 02.03.2006 22:23
Datei auf FTP-Server ändern ohne lokal abzuspeichern faux PHP-Fortgeschrittene 11 02.09.2005 11:54
Suche Tipps für Persormance-Steigerung (Geld für Nützliches) Beitragsarchiv 18 16.08.2005 10:57
PHP Class Datei Basirende Datenbank mit MySQL Syntax atom-dragon Beitragsarchiv 4 01.08.2005 06:57
Ordner Struktur auslesen bestimmte datei finden .... silverghost PHP Tipps 2005 3 24.05.2005 13:55
aus php datei eine pdf datei erzeugen lassen raffnix PHP-Fortgeschrittene 5 04.02.2005 15:08
Datei mit php erzeugen Stümper PHP Tipps 2004 4 12.10.2004 12:51
php und ftp PHP Tipps 2004 4 07.10.2004 09:58
PHP5 &amp;amp;amp;amp;amp;amp;amp;amp;amp;amp; MySQL Datenbanken 5 01.08.2004 05:47
aus mysql db auslesen und in datei schreiben. Sclot PHP Tipps 2004 2 19.07.2004 21:56

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
mysql befehle aus textdatei, create_tables.sql, mysql befehle aus datei einlesen, mysql lese commands, mysql befehle, mysql befehle über datei, mysql befehle sql datei, mysql befehl einlesen einer datei, my sql befehle aus datei einlesen, befehl sql datei anzeigen, mysql abfrage lesen aus file, create table über file einlesen, mysql datei einlesen, php mysql befehle aus datei, mysql befehle aus datei, mysql befehle als textdatei, mysql-befehele datei einlesen, \create_tables.sql\, mysql befehleaus datei lesen, mysql befehl aus einer textdatei laden

Alle Zeitangaben in WEZ +1. Es ist jetzt 08:48 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.