19.3. String-Quoting bei SybaseAntwort von Timm FriebeBei 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 ); Antwort von Kerry W. LothropDurch das Einschalten des Parameters magic_quotes_sybase ändert sich auch das Verhalten der Funktion addslashes() , selbst wenn die Parameter magic_quotes_gpc und magic_quotes_runtime deaktiviert sind. $string = '\' \ "'; // magic_quotes_sybase = Off echo addslashes($string); Ergibt \' \\ \" // magic_quotes_sybase = On echo addslashes($string); Ergibt '' \ " |
||
19.3. String-Quoting bei Sybase http://www.php-faq.de/q/q-sybase-quoting.html |
||
Archiv der de.comp.lang.php-FAQ Dies ist eine Archivseite von 2008 und wurde seitdem nicht geändert. Das dclp-FAQ-Team |