PHP: Función simple de búsqueda en MySQL…
if (!function_exists('mysql_search')) {
function mysql_search($table, $columns, $query = '', $options = Array()) {
if (empty($query)) { return Array(); }
$sql_query = Array();
$options['columns'] = isset($options['columns'])?$options['columns']:'*';
$options['method'] = isset($options['method'])?$options['method']:'OR';
$options['extra_sql'] = isset($options['extra_sql'])?$options['extra_sql']:'';
$query = ereg_replace('[[:<:]](and|or|the)[[:>:]]', '', $query);
$query = ereg_replace(' +', ' ', trim(stripslashes($query)));
$pattern = '/([[:alpha:]:]+)([[:alpha:] ]+)[[:alpha:]]?+[ ]?/i';
$regs = Array();
preg_match_all($pattern, $query, $regs);
$query = $regs[0];
while (list($key, $value) = @each($query)) {
$column = $columns;
$keywords = urldecode($value);
if (strpos($value, ':')) {
$column = substr($value, 0, strpos($value, ':'));
$keywords = trim(substr($keywords, strpos($keywords, ':') + 1));
$keywords = ereg_replace('\'', '', $keywords);
} else { $keywords = ereg_replace(' +', '|', $keywords); }
$column_list = explode(' ', $column);
$sql = Array();
for ($i = 0; $i < count($column_list); $i++) { $sql[] = '' . $column_list[$i] . ' REGEXP "' . $keywords . '"'; }
$query[$key] = Array('orignal'=>$value, 'sql'=>implode(' ' . $options['method'] . ' ', $sql));
$sql_query = array_merge($sql_query, $sql);
$sql_query = implode(' ' . $options['method'] . ' ', $sql_query);
}
$results = mysql_fetch_results(mysql_query('SELECT ' . $options['columns'] . ' FROM ' . $table . ' WHERE ' . $sql_query . ' ' . $options['extra_sql']));
return $results;
}
}
function mysql_search($table, $columns, $query = '', $options = Array()) {
if (empty($query)) { return Array(); }
$sql_query = Array();
$options['columns'] = isset($options['columns'])?$options['columns']:'*';
$options['method'] = isset($options['method'])?$options['method']:'OR';
$options['extra_sql'] = isset($options['extra_sql'])?$options['extra_sql']:'';
$query = ereg_replace('[[:<:]](and|or|the)[[:>:]]', '', $query);
$query = ereg_replace(' +', ' ', trim(stripslashes($query)));
$pattern = '/([[:alpha:]:]+)([[:alpha:] ]+)[[:alpha:]]?+[ ]?/i';
$regs = Array();
preg_match_all($pattern, $query, $regs);
$query = $regs[0];
while (list($key, $value) = @each($query)) {
$column = $columns;
$keywords = urldecode($value);
if (strpos($value, ':')) {
$column = substr($value, 0, strpos($value, ':'));
$keywords = trim(substr($keywords, strpos($keywords, ':') + 1));
$keywords = ereg_replace('\'', '', $keywords);
} else { $keywords = ereg_replace(' +', '|', $keywords); }
$column_list = explode(' ', $column);
$sql = Array();
for ($i = 0; $i < count($column_list); $i++) { $sql[] = '' . $column_list[$i] . ' REGEXP "' . $keywords . '"'; }
$query[$key] = Array('orignal'=>$value, 'sql'=>implode(' ' . $options['method'] . ' ', $sql));
$sql_query = array_merge($sql_query, $sql);
$sql_query = implode(' ' . $options['method'] . ' ', $sql_query);
}
$results = mysql_fetch_results(mysql_query('SELECT ' . $options['columns'] . ' FROM ' . $table . ' WHERE ' . $sql_query . ' ' . $options['extra_sql']));
return $results;
}
}
Saludos…
Puedes seguir cualquier respuesta a esta entrada mediante el canal RSS 2.0. Puedes dejar un comentario o enviar un trackback desde tu propio sitio.


Veo la función bastante cargada y no se si tiene mucha utilidad.
En principio parece que esta cogida de algún sitio (quizas si pongo el mismo texto en google salga la referencia?), porque esta claro que no la has hecho tu, sino estaría más explicada y no habría uso de funciones de hace muchos años.
El tema de usar un while con list() y each(), es lo que más canta, porque un programador actual sabría que es más cómodo y más eficiente usar foreach.
Por otro lado no pones casos de uso, ni los explicas. No se un copy y pega lo puede hacer todo el mundo y seguro que si le hechas más empeño estoy seguro de que puedes hacerlo mejor.
Saludos
Hola, si el fragmento es de un copy paste, la idea es aportar pequeños script en php sean buenos o malos. Aportar y si sirve usarlos… Tomare tu consejo de inspeccionarlo con mas detalle
Saludos…