PHP mysql select concat

У меня есть эта функция, которая показывает autosuggest в форме:

function searchbyId($params) { $input = strtolower($params['input']); $len = strlen($input); $limit = isset($params['limit']) ? (int) $params['limit']:25; $items=array(); $sql='SELECT DISTINCT nIdentidad, CONCAT(primerNombre, ' ', segundoNombre, ' ', primerApellido, ' ', segundoApellido) AS nombre FROM tarjeta_indent WHERE nIdentidad LIKE \''.$input.'%\' ORDER BY nIdentidad LIMIT '.$limit; $resp=db_query($sql); if($resp && db_num_rows($resp)){ while(list($nIdentidad)=db_fetch_row($resp)) { //$name=(strpos($name,'@')===false)?$name:''; $items[] ='{"id": "'.$nIdentidad.'", "value": "'.$nIdentidad.'"}'; } } $result= '{"results": ['.implode(", ", $items).']}'; return $result; } 

но работает только в том случае, если я меняю запрос на это:

 $sql='SELECT DISTINCT nIdentidad FROM tarjeta_indent WHERE nIdentidad LIKE \''.$input.'%\' ORDER BY nIdentidad LIMIT '.$limit; 

Как я могу сделать concat часть?

Благодарю.

Я чувствую, что это довольно просто, но у вас есть синтаксическая ошибка в вашем заявлении concat; вы используете одиночные кавычки для вывода строк, но строка PHP определяется одинарными кавычками:

 $sql='SELECT DISTINCT nIdentidad, CONCAT(primerNombre, ' ', segundoNombre, ' ', primerApellido, ' ', segundoApellido) AS nombre FROM tarjeta_indent WHERE nIdentidad LIKE \''.$input.'%\' ORDER BY nIdentidad LIMIT '.$limit; 

Как насчет этого?

 $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); 

Если я прав о db_query и вы используете Drupal, попробуйте это вместо (для 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)); 

Это будет версия Drupal 6:

 $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); 

CONCAT будет работать со строками / varchar, но не с числами. Поэтому, если primerNombre и segundNombre являются типами данных INT, CONCAT завершится с ошибкой. Попробуйте использовать функцию CONVERT:

 SELECT DISTINCT nIdentidad, CONCAT( CONVERT(primerNombre, char(8)), ' ', CONVERT(segundoNombre, char(8)) ) as nombre