SparcoCF причина в том, что unset не сдвигает индексы..
я почти весь код тут пишу не запуская
замените
Цитата: if (empty($num[0])) unset($num[0]);
на
if (empty($num[0])) array_shift($num);
ну и для экранировки символов _ и % замените
array_map("trim",$num)
на
array_map("mytrim",$num);
function mytrim($el)
{
$el=trim($el);
$el=str_replace("%","\%",$el);
$el=str_replace("_","\_",$el);
return $el;
}
правда тут может быть ньюанс.. из за дальнейшего mysql_real_escape_string \ преобразуется в \\
надо попробовать и посмотреть.
опять же - пишу подробно, не через регулярку, чтобы было понятнее