i have this function that shows an autosuggest in a form:
function searchbyId($params) {
$input = strtolower($params[\'input\']);
$len = strlen($input);
CONCAT will work with strings/varchar, but not with numbers. So if primerNombre and segundNombre are INT data types, CONCAT will fail. Try using the CONVERT function:
SELECT DISTINCT nIdentidad,
CONCAT( CONVERT(primerNombre, char(8)), ' ',
CONVERT(segundoNombre, char(8)) ) as nombre
I feel like this is decidedly simple, but you have a syntax error in your concat statement; you're using single quotes to escape strings but the PHP string is defined with single quotes:
$sql='SELECT DISTINCT nIdentidad, CONCAT(primerNombre, ' ', segundoNombre, ' ', primerApellido, ' ', segundoApellido) AS nombre FROM tarjeta_indent WHERE nIdentidad LIKE \''.$input.'%\' ORDER BY nIdentidad LIMIT '.$limit;
How about this?
$sql = sprintf(<<<SQL
SELECT
DISTINCT nIdentidad,
CONCAT(primerNombre, ' ', segundoNombre, ' ', primerApellido, ' ', segundoApellido) AS nombre
FROM tarjeta_indent
WHERE nIdentidad LIKE '%s'
ORDER BY nIdentidaa
LIMIT %d
SQL
, mysql_real_escape_string($input), $limit);
If I'm right about db_query
and you're using Drupal, try this instead (for Drupal 7):
$sql = <<<SQL
SELECT
DISTINCT nIdentidad,
CONCAT(primerNombre, ' ', segundoNombre, ' ', primerApellido, ' ', segundoApellido) AS nombre
FROM tarjeta_indent
WHERE nIdentidad LIKE :input
ORDER BY nIdentidaa
LIMIT :limit
SQL;
$resp = db_query($sql, array(':input' => $input, ':limit' => $limit));
This would be the Drupal 6 version:
$sql = <<<SQL
SELECT
DISTINCT nIdentidad,
CONCAT(primerNombre, ' ', segundoNombre, ' ', primerApellido, ' ', segundoApellido) AS nombre
FROM tarjeta_indent
WHERE nIdentidad LIKE %s
ORDER BY nIdentidaa
LIMIT %d
SQL;
$resp = db_query($sql, $input, $limit);