PHP:
private function prepareQuery($args)
{
$query = array_shift($args);
preg_match_all('~[^\\\](\?[a-z])~',$query,$m,PREG_OFFSET_CAPTURE);
$pholders = $m[1];
if ( count($pholders) != count($args) )
{
trigger_error("Number of args doesn't match number of placeholders");
return FALSE;
}
$shift = 0;
foreach ($pholders as $i => $p)
{
$pholder = $p[0];
$offset = $p[1] + $shift;
$value = $args[$i];
switch ($pholder)
{
case '?n':
$value = "`".str_replace("`","``",$value)."`";
break;
case '?s':
$value = "'".mysql_real_escape_string($value,$this->connect)."'";
break;
case '?i':
$value = " ". number_format($value, 0, '.', '');
break;
case '?a':
$value = $this->createIN($value);
break;
default:
trigger_error("Unknown placeholder type");
return FALSE;
}
$query = substr_replace($query,$value,$offset,2);
$shift+= strlen($value) - strlen($pholder);
}
return $query;
}