php.de

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

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 09.09.2006, 13:14  
Erfahrener Benutzer
 
Registriert seit: 14.10.2005
Beiträge: 153
Fatal Error
Standard sql_anweisung.sql und php_datei.php

Hallo,

ich wollt mal nachfragen wie das mit .sql dateien funktioniert?

Ich möchte die SQL Querys nicht in der php datei schreiben, also:

PHP-Code:
<?php
$sql 
"SELECT * FROM tab_test" // ...
$mysql_query($sql);
?>
sondern möchte diese anweisung in einer .sql datei speichern.
Code:
delete from person where id='1' or (vorname='' and nachname='admin');
Wie funktioniert nun das ganze, fo finde ich tuts dazu, oder geht sowas nicht
Fatal Error ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

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

Alt 09.09.2006, 14:02  
Erfahrener Benutzer
 
Registriert seit: 14.10.2005
Beiträge: 153
Fatal Error
Standard

Zitat:
Zitat von Cineplex
Wieso sollte das nicht funktionieren? Du kannst doch auch mit INSERT, UPDATE etc. in einer .SQL-Datei arbeiten. Alle Befehle die innerhalb von mysql_query() usw. funktionieren, funktionieren auch in SQL.
Ja, aber wie funktioniert das denn ? Ich meine reicht es einfach wenn man die Datei includet ? Und wie werden die Variablen übergeben ?
Fatal Error ist offline  
Alt 09.09.2006, 14:26  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard

Denk doch mal nach!
In der *.sql Datei steht der String, den du an mysql_query() übergeben musst.
Wie kommst du dann drauf, dass Einbinden per include reicht?

Wie wärs mit file_get_contents()
http://de.php.net/file_get_contents

Du musst dir dann allerdings noch etwas überlegen, wenn du Variablen einsetzen möchtest, eventuell hilft dir hier
http://de.php.net/vsprintf
allerdings koppelst du dich dann auch hardcodet an den Datei-Inhalt, zumindest was die Anzahl der Variablen angeht, dann geht dein "Vorteil" des Auslagerns in Dateien schon wieder flöten.

Warum möchtest du denn den SQL-Teil auslagern? Flexibler macht das deinen Code nicht!
Zergling-new ist offline  
Alt 09.09.2006, 14:42  
Erfahrener Benutzer
 
Registriert seit: 14.10.2005
Beiträge: 153
Fatal Error
Standard

Zitat:
Zitat von Zergling
Warum möchtest du denn den SQL-Teil auslagern? Flexibler macht das deinen Code nicht!
Naja, dass man das nicht einfach so includen kann und fertig is, war mir schon klar, deshalb habe ich hiert auch nachgefragt xD

Warum ich dies in .sql haben wollte, naja um mögliche Fehler zu vermeiden. Vergesse manchmal nach nem komma das leerzeichen, und schon kann ich wieder nach nem Fehler suchen weil nichts mehr geht.

z.B.:
PHP-Code:
<?php
$sql 
"INSERT INTO tab_test "
         
."SET name = '".$name."', "    // wenn an dieser Stelel ein Leerzeichen zwischen dem Komma und den Doppelten Anführungszeichen vergessen wird wird es knallen.
         
."datum      = '".$datum."';";
$save mysql_query($sql);
?>
[/php]
Fatal Error ist offline  
Alt 09.09.2006, 15:01  
Erfahrener Benutzer
 
Registriert seit: 08.05.2005
Beiträge: 814
andy
andy eine Nachricht über ICQ schicken
Standard

Das mit den Kommas liegt wohl eher daran, das du deinen Code nicht lesen kannst, was daran liegt, das du das ' und " Konzept nicht kennst /verstanden hast.
andy ist offline  
Alt 09.09.2006, 15:37  
Erfahrener Benutzer
 
Registriert seit: 14.10.2005
Beiträge: 153
Fatal Error
Standard

Zitat:
Zitat von Cineplex
Wenn du das Leerzeichen in der SQL-Datei vergisst, dann funktioniert es doch auch nicht? Wo ist also dein Problem?
Außerdem kannst du mit mysql_error() doch ganz schnell jeden Fehler aufdecken.
In SQL:
PHP-Code:
INSERT INTO tab_test SET name 'name'datum 'datum'// Nach dem Komma kommt ein Leerzeichen das sieht man sofort.
INSERT INTO tab_test SET name 'name',datum 'datum'// Wenn man das hier vergisst dann fällt es sofort auf. 
In PHP:
PHP-Code:
$sql "INSERT INTO tab_test "
         
."SET name = '".$name."',"    // Hier wurde jetzt das Leerzeichen vergessen doch es fällt nicht so schnell auf wie in dem obigem Beispiel.
         
."datum      = '".$datum."';";
$save mysql_query($sql); 
Zitat:
Zitat von andy
Das mit den Kommas liegt wohl eher daran, das du deinen Code nicht lesen kannst, was daran liegt, das du das ' und " Konzept nicht kennst /verstanden hast.
Was gibt es da nicht zu verstehen o_0 ?
Meinst du dass man bei echo "Name: ".$name; auch echo "Name: $name" schreiben kann und bei echo 'Name: '.$name nicht ??

Ich kanns auch so hinschreiben:
PHP-Code:
$sql 'INSERT INTO tab_test '
         
.'SET name = \''.$name.'\','
         
.'datum      = \''.$datum.'\';';
$save mysql_query($sql); 
Fatal Error ist offline  
Alt 09.09.2006, 15:43  
Erfahrener Benutzer
 
Registriert seit: 08.05.2005
Beiträge: 814
andy
andy eine Nachricht über ICQ schicken
Standard

Ja, genau das meinte ich.
PHP-Code:
<?php
$sql 
"INSERT INTO tab_test SET name = '$name', datum = '$datum' "
?>
Da musst du schon extrem blind sein, wenn du da nicht erkennst das da ein Leerzeichen fehlt.
andy ist offline  
Alt 09.09.2006, 15:44  
Erfahrener Benutzer
 
Registriert seit: 14.10.2005
Beiträge: 153
Fatal Error
Standard

Zitat:
Zitat von andy
Ja, genau das meinte ich.
PHP-Code:
<?php
$sql 
"INSERT INTO tab_test SET name = '$name', datum = '$datum' "
?>
Da musst du schon extrem blind sein, wenn du da nicht erkennst das da ein Leerzeichen fehlt.
Ja aber das problem ist dass ich das ganze nicht in einer Zeile schreibe sondern in mehreren da sonst die eine Zeile zu lang währe.
Fatal Error ist offline  
Alt 09.09.2006, 18:23  
Erfahrener Benutzer
 
Registriert seit: 18.07.2004
Beiträge: 2.162
PHP-Kenntnisse:
Fortgeschritten
Basti
Standard

Viellecht mal ein bischen in übersichtliche Strukturen investieren?

PHP-Code:

class Dao_Page extends Dao
{

    public function 
__construct(MySqlConnection $Connection)
    {
        
parent::__construct($Connection);
    }

    public function 
insertAfter($iSibling$a)
    {
        
$sQuery '

            LOCK TABLES pages WRITE
        '
;

        
$this->Connection->query($sQuery);

        
$sQuery "

            SELECT
                `right`

            FROM
                pages

            WHERE
                id = '%s'
        "
;

        
$this->Connection->query($sQuery, array($iSibling));

        
$aSibling $this->Connection->fetch();
        
$sRight   $aSibling['right'];

        
$sQuery "

            UPDATE
                pages

            SET
                `left`      =  `left` + 2

            WHERE
                `left`      >  '%s'
        "
;

        
$this->Connection->query($sQuery, array($sRight));

        
$sQuery "

            UPDATE
                pages

            SET
                `right`      =  `right` + 2

            WHERE
                `right`      > '%s'
        "
;

        
$this->Connection->query($sQuery, array($sRight));

        
$sQuery "

            INSERT INTO pages

                (
                name,
                `group`,
                pagetype,
                title,
                menutitle,
                `left`,
                `right`)

            VALUES

                ('%s','%s','%s','%s','%s',%s + 1,%s + 2)
        "
;

        
$this->Connection->query($sQuery, array(
            
$a['name'],
            
$a['group'],
            
$a['pagetype'],
            
$a['title'],
            
$a['menutitle'],
            
$sRight,
            
$sRight));

        
$sQuery "

            UNLOCK TABLES;
        "
;

        
$this->Connection->query($sQuery);

        return 
mysql_insert_id();
    }

    
// ...
}
?> 
Basti
Basti ist offline  
Alt 09.09.2006, 22:53  
Erfahrener Benutzer
 
Registriert seit: 03.01.2006
Beiträge: 253
CC84
Standard

Zitat:
Zitat von Fatal Error
Zitat:
Zitat von andy
Ja, genau das meinte ich.

Da musst du schon extrem blind sein, wenn du da nicht erkennst das da ein Leerzeichen fehlt.
Ja aber das problem ist dass ich das ganze nicht in einer Zeile schreibe sondern in mehreren da sonst die eine Zeile zu lang währe.
dann kann man das immer noch sauber trennen

PHP-Code:
        $result $this->db_query("SELECT s.*,g.expire, g.activ " .
                
"FROM server s " .
                
"LEFT JOIN (gameaccount g) " .
                
"ON (g.serverid = s.serverid AND " .
                
"g.userid = $userid) " .
                
"WHERE s.serverid = $id  LIMIT 1"); 
ist in meinen Augen noch auch nicht so schlimm du musst eben drauf achten am Ende jeder Zeile nen Leerzeichen zu haben.

Wenn du nun wie in diesem Fall hier alles an ne eigene Funktion mapst, dann schreibst einfach noch ein:

PHP-Code:
private function db_query($string){
    if (!(
$result $this->db->query($string)))
    
$this->log_add(4,1,"Fehler: $this->db->error\nQuery:$string");
    return 
$result;

oder anstatt meines $this->log_add ein echo und schon siehst du DIREKT bei jeder SQL anfrage nen Fehler. Meine Variante hat nun den Vorteil, dass der User selber nix mit bekommt, aber das muss jeder selber wissen.
CC84 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


Alle Zeitangaben in WEZ +2. Es ist jetzt 12:45 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.