Я думаю, это может сработать:
$query = "SELECT id, name, contact, contact2, address1, address2, city, state, postalcode, country, location, workphone, fax, email, webaddress, region, rail, food, forest, metal, bulk, chem, general, paper FROM companies_new ";
$conditions = array();
if(!empty($search_co)) {
$conditions[] = "name LIKE '%" . $search_co ."%' ";
}
if(!empty($search_first)) {
$conditions[] = "contact LIKE '%" .$search_first."%' ";
}
if(!empty($search_last)) {
$conditions[] = "contact LIKE '%" .$search_last."%' ";
}
if(!empty($search_city)) {
$conditions[] = "city = '" . $search_city . "' ";
}
if(!empty($search_state)) {
$conditions[] = "state = '" . $search_state . "' " ;
}
if (count($conditions) > 0) {
$query .= " WHERE " . implode(' AND ', $conditions);
}
$query .= " ORDER BY state ASC";
Редактировать: оригинальная версия была пустой, она должна была быть пустой. Это сейчас исправлено.
Редактировать 2: это также предполагает, что вы уже очистили переменные, используя mysql_real_escape_string или аналогичный.
Обратите внимание, что ORDER BY должен быть после предложений WHERE.
implode берет массив и превращает его в строку с указанной строкой между элементами. Итак, учитывая:
$myArray = array('A', 'B', 'C');
вы можете сделать
$myString = implode(' and ', $myArray);
, который поместил бы "A и B и C" в $myString
.