dclp FAQ

FAQ der Newsgroups de.comp.lang.php.*

 
  • Increase font size
  • Default font size
  • Decrease font size

Datenbanken: Sybase

String-Quoting bei Sybase

E-MailDruckenPDFLesezeichen anlegen: Du musst dich einloggen um ein Lesezeichen für diesen Beitrag anzulegen. Es wird deiner persönlichen Lesezeichenliste hinzugefügt.

Bei Sybase müssen Anführungsstriche Strings innerhalb von Queries nicht mit einem Backslash (\), sondern mit dem jeweils gleichen Zeichen escaped werden. Folgendes Beispiel sollte das anschaulich machen:

SELECT "Er sagte: ""Hallo Welt"""
SELECT 'Das gibt''s doch nicht'

Eine Komfort-Funktion, die sich darum kümmert, dass in SQL-Statements immer richtig gequotet wird, soll hier gezeigt werden:

function sybase_prepare() {
  $args= func_get_args();
  $sql= $args[0];
  if (sizeof($args)<= 1) return $sql;
  $j= 0;    
  $sql= $tok= strtok($sql, '%');
  while (++$j && $tok= strtok('%')) {
    $arg= (is_object($args[$j]) && method_exists($args[$j], 'toString') 
      ? $args[$j]->toString()
      : $args[$j]
    );
    switch ($tok{0}) {
      case 'd': 
        $sql.= ($arg === NULL ? 'NULL' : intval($arg)).substr($tok, 1); 
        break;
 
      case 'c': 
        $sql.= substr($tok, 1); 
        break;
 
      case 's': 
        $sql.= ($arg === NULL ? 'NULL' : "'".str_replace("'", "''", $arg)."'").substr($tok, 1); 
        break;
 
      default: 
        $sql.= '%'.$tok; $j--;
    }
  }
  return $sql;
}
 
// Beispiel 1
$sql= sybase_prepare('
  insert into person (
    person_id, name, company
  ) values (
    %d, %s, %s
  )',
  1,
  'Dau Jones',
  NULL
);
 
// Beispiel 2
class Date {
  var $utime;
 
  function Date($utime) {
    $this->utime= $utime;
  }
 
  function toString($fmt= 'Y-m-d H:i:s') {
    return date($fmt, $this->utime);
  }
}
 
$date= &new Date(time());
$sql= sybase_prepare(
  'select count(*) from %c where lastchange= %s',
  'account',
  $date
);
String-Quoting bei Sybase
http://www.php-faq.de/q-sybase-quoting.html
 

Login