tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
2
ZUGRIFFE
190
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Kalito Kalito ist offline Mitglied Brokat
    Registriert seit
    Aug 2010
    Ort
    Leipzig
    Beiträge
    380
    Hallo,

    wegen prepared statement habe ich folgenden Code gefunden.
    Aberr folgende Funktionen verstehe ich nicht, was diese machen:
    PHP-Code:
    public function prepare($strQuery)
        {
            if (!
    strlen($strQuery))
            {
                throw new 
    Exception('Empty query string');
            }

            
    $this->resResult NULL;
            
    $this->strQuery $this->prepare_query($strQuery);

            
    // Auto-generate the SET/VALUES subpart
            
    if (strncasecmp($this->strQuery'INSERT'6) === || strncasecmp($this->strQuery'UPDATE'6) === 0)
            {
                
    $this->strQuery str_replace('%s''%p'$this->strQuery);
            }

            
    // Replace wildcards
            
    $arrChunks preg_split("/('[^']*')/"$this->strQuery, -1PREG_SPLIT_DELIM_CAPTURE|PREG_SPLIT_NO_EMPTY);

            foreach (
    $arrChunks as $k=>$v)
            {
                if (
    substr($v01) == "'")
                {
                    continue;
                }

                
    $arrChunks[$k] = str_replace('?''%s'$v);
            }

            
    $this->strQuery trim(implode(''$arrChunks));
            return 
    $this;
        } 
    PHP-Code:
    public function execute()
        {
            
    $arrParams func_get_args();

            if (
    is_array($arrParams[0]))
            {
                
    $arrParams array_values($arrParams[0]);
            }

            
    $this->replaceWildcards($arrParams);
            
    $strKey md5($this->strQuery);

            
    // Try to load the result from cache
            
    if (isset(self::$arrCache[$strKey]) && !self::$arrCache[$strKey]->isModified)
            {
                return 
    self::$arrCache[$strKey]->reset();
            }

            
    $objResult $this->query();

            
    // Cache the result objects
            
    if ($objResult instanceof Database_Result)
            {
                
    self::$arrCache[$strKey] = $objResult;
            }

            return 
    $objResult;
        } 
    Wenn ich nen Query absetzen will mache ich das dann immer so:
    PHP-Code:
    $this->prepared("UPDATE tabelle SET id=? WHERE user=?")->execute(8,'Kalito'); 
    Hab das ganze aus nen CMS
     
    Ich bin keine Signatur! - Auch wenn`s so aussieht :) - Wirklich!

    Über ein Danke freut sich jeder

  2. #2
    Avatar von saftmeister
    saftmeister saftmeister ist offline Der Saft sei mit dir
    tutorials.de Premium-User
    Registriert seit
    May 2006
    Ort
    There is no place like 127.0.0.1
    Beiträge
    3.521
    Was verstehst du denn daran nicht? Die prepare()-Methode nimmt das SQL-Statement auseinander und bereitet es darauf vor, das an die Platzhalter-Stellen die Werte gesetzt werden. Grundsätzlich ist diese prepare()-Methode aber ungenügend, denn ein ordentliches prepare() würde den Typen in der Datenbank berücksichtigen.

    Die execute()-Methode fügt evtl. übergebene Werte in die Platzhalter-Stellen ein. Auch hier wird der Datenbank-Spaltentyp nicht berücksichtigt.

    Diese Implementierung von Prepared Statements bietet kein einziges der wirklich nützlichen Features von RDBMS-Prepared-Statements an.

    Verwende doch lieber Mysqli oder PDO.
     
    Grüße
    --
    Qualität des Codes wird in WTF's/Min gemessen: Je mehr, desto schlechter der Code ;-)

  3. #3
    Avatar von Raisch
    Raisch Raisch ist offline extraordinary bit
    Registriert seit
    Aug 2011
    Ort
    Berlin
    Beiträge
    333
    Zitat Zitat von saftmeister Beitrag anzeigen
    Was verstehst du denn daran nicht? Die prepare()-Methode nimmt das SQL-Statement auseinander und bereitet es darauf vor, das an die Platzhalter-Stellen die Werte gesetzt werden. Grundsätzlich ist diese prepare()-Methode aber ungenügend, denn ein ordentliches prepare() würde den Typen in der Datenbank berücksichtigen.

    Die execute()-Methode fügt evtl. übergebene Werte in die Platzhalter-Stellen ein. Auch hier wird der Datenbank-Spaltentyp nicht berücksichtigt.

    Diese Implementierung von Prepared Statements bietet kein einziges der wirklich nützlichen Features von RDBMS-Prepared-Statements an.

    Verwende doch lieber Mysqli oder PDO.
    Lieber PDO, da ist er unabhängiger vom DBMS und das wird sicher auch eher weiterentwickelt als MySQLi (mMn).

    Gruß
     

Ähnliche Themen

  1. Antworten: 4
    Letzter Beitrag: 19.08.10, 20:20
  2. Ich verstehe es nicht...
    Von MsvP@habdichliebhasi im Forum CSS
    Antworten: 10
    Letzter Beitrag: 02.11.07, 18:48
  3. Einsteinrätzel lösungsansatz - verstehe den Code nicht
    Von StressMaker im Forum CGI, Perl, Python, Ruby, Power Shell
    Antworten: 3
    Letzter Beitrag: 28.11.04, 17:48
  4. Antworten: 8
    Letzter Beitrag: 06.06.04, 12:49
  5. Ich verstehe PHP nicht!
    Von Fbiede im Forum PHP
    Antworten: 19
    Letzter Beitrag: 17.07.02, 21:12