Ankündigung

Einklappen
Keine Ankündigung bisher.

PDO und quoteIdentifier()?

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • PDO und quoteIdentifier()?

    Hallo,

    ich arbeite eigentlich nur mit dem Zend_Db_Adapter für PDO/MySQL oder Oracle. Da gibt es quoteIdentifier() um zum Beispiel variable Identifier zu maskieren. Jetzt benutze ich in einem privaten Projekt einmal die reine PDO-Klasse und möchte zum Beispiel folgendes erledigen:
    Code:
    SHOW COLUMNS FROM ?
    Sprich ich führe zunächs SHOW FULL TABLES aus, durchlaufe das Ergebnis in einer Schleife, welche mir dann den Tabellennamen liefert, den ich nun seinerseits in meinen Query einbauen möchte. Was ist da bei reinem PDO denn die richtige Herangehensweise?
    $pdo->quote($tableName)? Mit welcher Methode, prepare(), wie?
    PHP-Code:
        protected function _readDatabase()
        {
            
    $stmt $this->_pdo->prepare("SHOW FULL TABLES");
            
    $stmt->execute();
            foreach (
    $stmt->fetchAll(PDO::FETCH_NUM) as $data) {
                
    $this->_readTable($data);
            }
        }
        
        protected function 
    _readTable(array $tableData)
        {
            
    $name $tableData[0];
            
    $stmt $this->_pdo->prepare("SHOW COLUMNS FROM `?`", array($this->_pdo->quote($name)));
            
    Debug::stop($stmt->fetchAll());
        } 
    Die Ausgabe ist ein leerer Array. Wahrscheinlich ist der Query an sich also schon fehlgeschlagen. Kann ich mir irgendwie den Query ausgeben, den ich mit prepare() zusammengebaut habe? Mit Zend_Db_Adapter wär das alles irgendwie einfacher ..
    "Mein Name ist Lohse, ich kaufe hier ein."


  • #2
    PHP-Code:
        protected function _readDatabase()
        {
            
    $stmt $this->_pdo->prepare("SHOW FULL TABLES");
            
    $stmt->execute();
            foreach (
    $stmt->fetchAll(PDO::FETCH_NUM) as $data) {
                
    $this->_readTable($data);
            }
        }
        
        protected function 
    _readTable(array $tableData)
        {
            
    $stmt $this->_pdo->prepare("SHOW COLUMNS FROM " $this->_quoteIdentifier($tableData[0]));
            
    $stmt->execute();
            
    Debug::stop($stmt->fetchAll());
        }
        
        protected function 
    _quoteIdentifier($identifier)
        {
            return 
    "`" substr($this->_pdo->quote($identifier), 1, -1) . "`";
        } 
    So gehts jetzt. Ist substr() eigentlich korrekt, oder mb_substr() besser? Befürchte dass bei mb_substr() jemand mir irgendwie noch mit Multibytezeichen was zernageln könnte.
    "Mein Name ist Lohse, ich kaufe hier ein."

    Kommentar

    Lädt...
    X