X-Git-Url: http://git.polytechnique.org/?a=blobdiff_plain;f=classes%2Fxdb.php;h=17767915f59c41a10734bcb01a5205c4c5919616;hb=851962db3851d0ff89cf6cfaa9dcb82487e437bf;hp=ea728d44b2b4b08d4382f9667d2bac5ab890effa;hpb=31ac496f284cd21164e05d1472ad1ceca9fe1095;p=platal.git diff --git a/classes/xdb.php b/classes/xdb.php index ea728d4..1776791 100644 --- a/classes/xdb.php +++ b/classes/xdb.php @@ -1,6 +1,6 @@ dbprefix . '$1', $args[0]); + $query[0] = str_replace('%', '%%', $query[0]); + $query[0] = str_replace('{?}', '%s', $query[0]); return call_user_func_array('sprintf', $query); } @@ -111,7 +114,10 @@ class XDB } else { $text = 'Erreur lors de l\'écriture dans la base de données'; } - if ($globals->debug) { + if (php_sapi_name() == 'cli') { + $text .= "\n" . XDB::_reformatQuery($query) + . "\n" . XDB::$mysqli->error; + } else if ($globals->debug) { $text .= '
' . pl_entities(XDB::_reformatQuery($query)) . '
'; } else { $file = fopen($globals->spoolroot . '/spool/tmp/query_errors', 'a'); @@ -153,7 +159,35 @@ class XDB // Produce the SQL statement representing an array public static function formatArray(array $array) { - return '(' . implode(', ', array_map(array('XDB', 'escape'), $array)) . ')'; + return self::escape($array); + } + + const WILDCARD_EXACT = 0x00; + const WILDCARD_PREFIX = 0x01; + const WILDCARD_SUFFIX = 0x02; + const WILDCARD_CONTAINS = 0x03; // WILDCARD_PREFIX | WILDCARD_SUFFIX + + // Returns the SQL statement for a wildcard search. + public static function formatWildcards($mode, $text) + { + if ($mode == self::WILDCARD_EXACT) { + return XDB::format(' = {?}', $text); + } else { + $text = str_replace(array('%', '_'), array('\%', '\_'), $text); + if ($mode & self::WILDCARD_PREFIX) { + $text = $text . '%'; + } + if ($mode & self::WILDCARD_SUFFIX) { + $text = '%' . $text; + } + return XDB::format(" LIKE {?}", $text); + } + } + + // Returns a FIELD(blah, 3, 1, 2) for use in an order with custom orders + public static function formatCustomOrder($field, $values) + { + return 'FIELD( ' . $field . ', ' . implode(', ', array_map(array('XDB', 'escape'), $values)) . ')'; } public static function execute() @@ -283,9 +317,12 @@ class XDB case 'object': if ($var instanceof PlFlagSet) { return "'" . addslashes($var->flags()) . "'"; + } else { + return "'".addslashes(serialize($var))."'"; } + case 'array': - return "'".addslashes(serialize($var))."'"; + return '(' . implode(', ', array_map(array('XDB', 'escape'), $var)) . ')'; default: die(var_export($var, true).' is not a valid for a database entry');