php.de

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

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 06.12.2005, 22:13  
Erfahrener Benutzer
 
Registriert seit: 25.04.2005
Beiträge: 1.356
HStev zeigte ein beschämendes Verhalten in der Vergangenheit
Standard RealEscape und Mehrzeilige SQL Statements

Servus,

aufgrund des Threads von wegen Sicherheit usw. ( http://www.phpfriend.de/forum/ftopic50781.html ) hab ich mal den Rat
befolgt und führe nun mysql_real_escape standartmäßig vor dem Query aus aber ich bekomme bei mehrzeiligen SQL Satements die zuvor wunderbar
funktioniert haben einen SQL Fehler nun.

Wie kann ich das verhindern?

PHP-Code:
$SQL "SELECT g.group_id, g.group_name 
               FROM " 
USER_GROUP_TABLE " ug, " GROUPS_TABLE " g 
               WHERE ug.user_id = '" 
$userdata['user_id'] . "' 
                 AND g.group_id = ug.group_id
                 AND LENGTH( g.group_name ) >0"



Zitat:
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 '\r FROM forum_user_group ug,
forum_groups g \r WHERE ug.us'
__________________
Gewisse Dinge behält man besser für sich, z.B. das man gewisse Dinge für sich behält.
HStev ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

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

Alt 06.12.2005, 22:20  
Gast
 
Beiträge: n/a
Standard

Wo kann man denn die Verwendung von mysql_real_escape_string() bewundern?
 
Alt 06.12.2005, 22:28  
Erfahrener Benutzer
 
Registriert seit: 25.04.2005
Beiträge: 1.356
HStev zeigte ein beschämendes Verhalten in der Vergangenheit
Standard

PHP-Code:
<?php
public function query($SQL$escape 'real'$unbuffered FALSE)
    {
        if ( !
is_bool($unbuffered) )
            throw new 
MySQLException('param not a boolean');
        
        if (!
$this->conn)        
            throw new 
MySQLConException($this->conn);
            
        if (
$this->resource)
            @
mysql_free_result($this->resource);
            
        if (
$escape == 'real')
        {
            
$SQL = @mysql_real_escape_string($SQL);
        }
        elseif (
$escape == TRUE)
        {           
            
$SQL = @mysql_escape_string($SQL);
        }
        elseif (!
is_bool($escape))
                throw new 
MySQLException('param not a string or boolean');
                
        if (!
$unbuffered)
        {
            
$this->resource mysql_query($SQL$this->conn);
        }
        else
        {
            
$this->resource mysql_unbuffered_query($SQL$this->conn);
        }
                
        if (!
$this->resource
        {        
            throw new 
MySQLIllegalQueryException($this->conn);
        }
    }
?>
__________________
Gewisse Dinge behält man besser für sich, z.B. das man gewisse Dinge für sich behält.
HStev ist offline  
Alt 06.12.2005, 22:35  
Gast
 
Beiträge: n/a
Standard

Zitat:
Zitat von HStev
PHP-Code:
<?php
...
            
$SQL = @mysql_real_escape_string($SQL);
...
Du solltest wohl nicht die ganze Query escapen [http://www.php.net/mysql_real_escape_string]... :wink:
 
Alt 06.12.2005, 22:35  
Erfahrener Benutzer
 
Registriert seit: 13.11.2005
Beiträge: 2.583
xabbuh
Standard

Du darfst nicht die komplette Abfrage mit mysql_real_escape_string bearbeiten sondern nur die Werte, die von Benutzer getätigt werden, da sonst zuviel maskiert wird. Lass dir einfach mal deine aktuelle Abfrage anzeigen, dann wirst du relativ schnell sehen, wo zuviele Backslashes vorhanden sind.
xabbuh ist offline  
Alt 06.12.2005, 22:37  
Erfahrener Benutzer
 
Registriert seit: 25.04.2005
Beiträge: 1.356
HStev zeigte ein beschämendes Verhalten in der Vergangenheit
Standard

hmmm da hab ich gar nicht so drauf geachtet das ist aber blöd
__________________
Gewisse Dinge behält man besser für sich, z.B. das man gewisse Dinge für sich behält.
HStev ist offline  
Alt 09.12.2005, 21:14  
Erfahrener Benutzer
 
Registriert seit: 25.04.2005
Beiträge: 1.356
HStev zeigte ein beschämendes Verhalten in der Vergangenheit
Standard

so umständlich aber das sollte nun funktionieren ...

PHP-Code:
<?php
/**    Bereitet einen SQL Befehl durch escapen der Benutzereingaben sicher vor um SQL Inejctions zu vermeiden
     *    @param string $SQL Ein SQL Statement
     *     @param array $secure_values Werte die für das Query vorbereitet werden sollen
     *    @exception MySQLException Verarbeitungsfehler
     *    @exception MySQLPrepareException Vorbereitungsfehler
     */
    
public function prepare($SQL$secure_values)
    {
        if (!
is_array($secure_values))
            throw new 
MySQLException("param not an array");
            
        if (!
preg_match("/\?/"$SQL))
            throw new 
MySQLPrepareException("no placeholder found");
        
        
$this->secure_values_fifo $secure_values;
        
        
$this->prepared_string preg_replace_callback("/\?/", array($this"replace_secure_values_callback"), $SQL); 
        
        
$this->secure_values_fifo NULL;           
    }
    
    
/**    Callback-Function die die Function prepare für jedes Element im Werte-Array aufrufen lässt
     *    @param array $treffer ist nötig, aber vollkommen unwichtig
     *    @exception MySQLPrepareException Vorbereitungsfehler
     */
    
protected function replace_secure_values_callback($treffer)
    {
        if (
count($this->secure_values_fifo) < 1)
            throw new 
MySQLPrepareException("not enough secure values");
            
        return 
mysql_real_escape_string(array_shift($this->secure_values_fifo));
    }
?>
__________________
Gewisse Dinge behält man besser für sich, z.B. das man gewisse Dinge für sich behält.
HStev 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
Frage zu prepared statements mit pdo Mack22 PHP-Fortgeschrittene 3 16.05.2008 15:10
begin, commit und rollback statements wollen nicht h0nIg Datenbanken 4 29.08.2007 11:49
[Erledigt] DB-Design und die Statements dazu Datenbanken 2 13.01.2006 11:15
[JS] Mehrzeilige Daten in Textarea schreiben HTML, Usability und Barrierefreiheit 2 23.10.2005 15:08
mehrzeilige select ergebnisse in (mehrdimensionales?) array PHP Tipps 2005-2 2 04.07.2005 22:50

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
php mehrzeilige sql statements, real escape sql query, php sql mehrzeilig, php mysql mehrzeilige query, php mysql mehrzeilige befehle, http://www.php.de/php-tipps-2007/34532-realescape-und-mehrzeilige-sql-statements.html, mssql real escape, mssql real escape string, php mehrzeiliger sql, mehrzeilige sql-anweisungen in php, \realescape\, php mehrzeiliger befehl, mssql php sicherhit escape, mysql real escape php schutz, php mehrzeilige befehle, php mehrzeilige anweisungen, php mehrzeilige sql, sql mehrzeilig, php sql mehrzeiliges update, php mehrzeiliges sql

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