php.de

Zurück   php.de > Webentwicklung > Datenbanken

Datenbanken SQL und Co

Antwort
 
LinkBack (1) Themen-Optionen Thema bewerten
Alt 12.01.2005, 08:54  
Benutzer
 
Registriert seit: 03.06.2003
Beiträge: 89
flyingeagle
Standard platzhalter in query ersetzen

hi, gibt es in mysql irgendwas um platzhalter in einem query zu ersetzen, bei oracle gibt es "OCIBindByName" gibts sowas auch fuer mysql
__________________
- Das Leben ist eine Spirale, man kotzt immer in der selben Kurve.
- Frauen behalten nur für sich, was sie nicht wissen.
flyingeagle ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

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

Alt 12.01.2005, 09:17  
Erfahrener Benutzer
 
Registriert seit: 18.09.2003
Beiträge: 13.598
PHP-Kenntnisse:
Fortgeschritten
imported_Ben ist zur Zeit noch ein unbeschriebenes Blatt
Standard

was meinst du mit platzhalter?
in der abfrage mit LIKE ist das %

oder willst du nur mit
http://php.net/sprintf
einen string bearbeiten?

oder was oder wie oder warum?
imported_Ben ist offline   Mit Zitat antworten
Alt 12.01.2005, 10:29  
Benutzer
 
Registriert seit: 03.06.2003
Beiträge: 89
flyingeagle
Standard

also wenn ich ein sql query habe was so aussieht

select * from db where year =:JAHR;

dann moechte ich das :JAHR durch den wert der variablen $XY ersetzen um dann den query mit korrekten werten absetzen zu koennen


mit sprintf wuerde das ja , so wie ich es verstanden habe, klappen.

aber mysql selbst hat eine solche funktion nicht an board oder?!
__________________
- Das Leben ist eine Spirale, man kotzt immer in der selben Kurve.
- Frauen behalten nur für sich, was sie nicht wissen.
flyingeagle ist offline   Mit Zitat antworten
Alt 12.01.2005, 10:37  
Erfahrener Benutzer
 
Registriert seit: 18.09.2003
Beiträge: 13.598
PHP-Kenntnisse:
Fortgeschritten
imported_Ben ist zur Zeit noch ein unbeschriebenes Blatt
Standard

da du sowieso einen string an mysql_query() übergibst kannst du es ja auch mit sprintf machen.

ob MySQL zu eine funktion anbietet ... hmm .. weiß ich nicht.
schau mal im manual ..
imported_Ben ist offline   Mit Zitat antworten
Alt 12.01.2005, 10:40  
Erfahrener Benutzer
 
Registriert seit: 21.12.2004
Beiträge: 5.232
PHP-Kenntnisse:
Fortgeschritten
mepeisen ist ein wunderbarer Anblickmepeisen ist ein wunderbarer Anblickmepeisen ist ein wunderbarer Anblickmepeisen ist ein wunderbarer Anblickmepeisen ist ein wunderbarer Anblickmepeisen ist ein wunderbarer Anblickmepeisen ist ein wunderbarer Anblick
mepeisen eine Nachricht über ICQ schicken mepeisen eine Nachricht über Skype™ schicken
Standard

Jein. Es gibt ab PHP5 bzw. ab mysqli die Möglichkeit, Prepared Statements einzusetzen, jedoch sind die anonym. Sprich es sieht so aus: "SELECT * FROM db WHERE year = ?".

Ich habe mir jedoch vor Ewigkeiten einmal eine solche kleine Klasse geschrieben, die genau das kann, was du brauchst. Ist etwas unsauber programmiert, weil ich da seit Ewigkeiten nichts mehr dran getan habe, aber sie funktioniert...:

PHP-Code:
<?php
class DBPreparedStatement
{
    
    function 
DBPreparedStatement($sql)
    {
        
$this->exploded=array();
        
$this->paramMap=array();
        
$doNext=false;
        
$expl=preg_split('/(:[:\w]?[\w]*)/',$sql,-1,PREG_SPLIT_DELIM_CAPTURE|PREG_SPLIT_NO_EMPTY);
        for (
$i=0;$i<count($expl);$i++)
        {
            if (
$expl[$i]=='::')
            {
                if (
$doNext)
                {
                    
$this->exploded[]=':';
                    
$doNext=false;
                }
                elseif (
count($this->exploded)==0$this->exploded[]=':';
                else 
$this->exploded[count($this->exploded)-1].=':';
            }
            else if (
$expl[$i][0]==':')
            {
                if (
count($this->exploded)==|| $doNext$this->exploded[]='';
                
$doNext=true;
                
$this->paramMap[]=substr($expl[$i],1);
                if (
$i==count($expl)-1$this->exploded[]='';
            }
            else
            {
                if (
$expl[$i][0]=='\\')
                {
                    if (
$doNext)
                    {
                        
$this->exploded[]=substr($expl[$i],1);
                        
$doNext=false;
                    }
                    elseif (
count($this->exploded)==0$this->exploded[]=substr($expl[$i],1);
                    else 
$this->exploded[count($this->exploded)-1].=substr($expl[$i],1);
                }
                elseif (
$doNext)
                {
                    
$this->exploded[]=$expl[$i];
                    
$doNext=false;
                }
                elseif (
count($this->exploded)==0$this->exploded[]=$expl[$i];
                else 
$this->exploded[count($this->exploded)-1].=$expl[$i];
            }
        }
    }
    
    function 
build($prm)
    {
        
$res='';
        
// TODO Warnung, wenn ein Parameter nicht richtig gesetzt wurde.
        
for ($i=0;$i<count($this->exploded);$i++)
        {
            if (
$i>0$res.=str_replace('\'','\\\'',$prm[$this->paramMap[$i-1]]);
            
$res.=$this->exploded[$i];
        }
        return 
$res;
    }
    
}
?>
Die Verwendung ist recht simpel:
PHP-Code:
<?php
$statement 
= new DBPreparedStatement("SELECT * FROM db WHERE year=:JAHR");
$sql $statement->build(array('JAHR'=>1990));
$result mysql_query($sql);
?>

Ein Doppelpunkt wird durch einen Backslash maskiert, also:
SELECT * FROM abc WHERE spalte LIKE '%\\:%'
wird zu
SELECT * FROM abc WHERE spalte LIKE '%:%'

Wie gesagt: Die Klasse ist nicht die schönste oder eleganteste, aber sie ist wirksam. Man kann auch, um Zeit zu sparen, alle benötigten Querys einer Anwendung einmal instantiieren und dann per serialize und file_put_contents in einer Datei ablegen. So spart man einiges an Zeit.
mepeisen ist offline   Mit Zitat antworten
Antwort


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

LinkBacks (?)
LinkBack to this Thread: http://www.php.de/datenbanken/15820-platzhalter-query-ersetzen.html
Erstellt von For Type Datum
Prepared Statements ohne PDO, MYSQLI - S² Media Support Forum This thread Refback 19.10.2008 01:50

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Variablen in Query automatisch escapen Maho88 PHP Tipps 2007 10 31.07.2007 08:42
MySQL Query zum Ersetzen von sonderbaren Umlauten Carino Datenbanken 13 14.05.2007 18:08
String durchsuchen und ersetzen unabhängig von Groß / KLein PHP Tipps 2006 2 09.07.2006 23:29
PHP/MySQL: Query wird nicht ausgeführt Zergling-new Tutorials 5 09.05.2006 23:16
query und ' speichern? flflfl PHP Tipps 2006 2 14.04.2006 18:21
String ersetzen Benshee PHP Tipps 2006 4 02.04.2006 21:43
Problem mit der preg_replace - Ersetzen einer Zeichenkette reimondo PHP Tipps 2006 10 07.02.2006 22:36
[Erledigt] count(..) in derselben Query noch &quot;abfragen&quot; Datenbanken 4 04.01.2006 17:33
query r�cksetzen? Promaetheus PHP Tipps 2007 15 01.12.2005 13:53
Query, was aus einer Tabelle mehrere Summen rausholt Datenbanken 3 14.09.2005 16:45
[Erledigt] includ. Text ersetzen ohne vars PHP Tipps 2004 3 13.09.2004 23:16
select query durch if anweisungen splitten Datenbanken 6 06.09.2004 13:46
[Erledigt] Query läuft nicht Datenbanken 6 13.08.2004 21:13
[Erledigt] RegExp: Dynamisches Ersetzen PHP-Fortgeschrittene 5 23.07.2004 13:39
Reguläre Ausdrücke beim suchen und ersetzen Off-Topic Diskussionen 5 05.07.2004 15:35

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
php platzhalter ersetzen, http://www.php.de/datenbanken/15820-platzhalter-query-ersetzen.html, platzhalter ersetzen php serialize, query ersetzen, sql abfrage platzhalter durch post variablen ersetzen, sql abfrage platzhalter php, platzhalter php dynamisch variablen ersetzen, query zum ersetzen, platzhalter ersetzen php, php ? platzhalter printf, html platzhalter ersetzen, platzhalter bei query nicht angenommen, query abfrage platzhalter, sprintf php ersetzen, platzhalter in query, platzhalter html formular abfrage, mysql suchen und ersetzen platzhalter, sql abfrage variablen ersetzen, php sprintf platzhalter, platzhalter query

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