PHP mysql select concat

后端 未结 2 767
遇见更好的自我
遇见更好的自我 2021-01-26 03:43

i have this function that shows an autosuggest in a form:

function searchbyId($params) {

    $input = strtolower($params[\'input\']);
    $len = strlen($input);         


        
相关标签:
2条回答
  • 2021-01-26 03:59

    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
    
    0 讨论(0)
  • 2021-01-26 04:00

    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);
    
    0 讨论(0)
提交回复
热议问题