0

mySQLでSQLLIKEクエリを実行していますが、これはローカル開発サーバーでは正常に実行されますが、本番サーバーでは1文字でしか機能しません。つまり、1文字より長い単語を入力しても、結果は返されません。

なぜそしてどのように私がそれを修正することができるかもしれないという考えはありますか?

前もって感謝します。

/**
* Searches all current vehicle listings for matches to given search string.
* @param string - Search keyword(s). Warning: If search string is empty all current vehicles are returned.
* @return array - Resulting table rows containing vin, imageFile, description, kms, auctioneerName, city, time.
*/

public function searchVehicles($search) { // 
  // Build up initial SQL query. Sub query returns all current vehicles
  $query = "SELECT * FROM (SELECT vehicles.auctionId, vin, imageFile, CONCAT_WS(' ', year, makeName, modelName) as description, kms, auctioneerName, city, time FROM vehicles, models, makes, auctions, auctioneers, locations WHERE time > NOW() AND vehicles.modelId = models.modelId AND models.makeId = makes.makeId AND vehicles.auctionId = auctions.auctionId AND auctions.auctioneerId = auctioneers.auctioneerId AND auctions.locationId = locations.locationId) AS results WHERE";
  $keywords = explode(" ", $search); // Break search into keywords

  // Loop through each keyword in the search to build up SQL query
  $firstLoop = true; // Initial loop flag
  foreach ($keywords as $keyword) {
     if (!$firstLoop) { // Check if this is not the first loop
        $query = $query . " AND"; // Then: Add extension statement to query
     } else {$firstLoop = false;} // Otherwise: Set flag to false

     // Add each keyword search to the query ensuring case insensitivity by converting to uppercase
     $query = $query . " UPPER(description) LIKE UPPER('%" . $this->escape($keyword) . "%')";
  }

  // Add ordering SQL
  $query = $query . " ORDER BY time";

  // Run query and return results (if any)
  return $this->query($query);
}
4

3 に答える 3

0

アッパーは内側にある必要があります。

$query = $query . " UPPER(description) LIKE CONCAT('%',UPPER(" . $this->escape($keyword) . "),'%')";
于 2012-05-25T05:18:16.060 に答える
0

使ってみてくださいCOLLATE

$query = $query . " description COLLATE utf8_general_ci like '" . $this->escape($keyword) . ")%'";

大文字と小文字を区別しない検索の場合

于 2012-05-25T05:23:56.163 に答える
0
$query = $query . " UPPER(description) LIKE '%" . strtoupper($this->escape($keyword)) . "%'";
于 2012-05-25T05:47:36.583 に答える