Я вижу две точки, где вы можете улучшить свой фрагмент кода. Но прежде всего позаботьтесь о том, чтобы $ str был правильно отформатирован для безопасного использования в вашем запросе SQL. В противном случае вы столкнетесь с проблемой под названием SQL-инъекция . Я предполагаю, что теперь для вашего кода.
- Используйте подстановочные знаки с функцией LIKE SQL .
- Поиск по трем полям с помощью одного SQL-запроса.
Пожалуйста, посмотрите пример кода, который содержит оба предложения. Сначала выполняется SQL-запрос. Необходимо выполнить только один запрос для всех (трех) полей вместо одного запроса для каждого поля. Это полезно, если вы расширите свой поиск позже.
/* build SQL query */
$conditions = array();
$search_keys = array('fname', 'lname', 'email' );
foreach ( $search_keys as $key )
{
$conditions[] = "{$key} LIKE \"%{$str}%\""; # Wildcard (%); [] works like array_push()
}
$query = sprintf('SELECT id FROM users WHERE (%s)', implode(' OR ', $conditions));
/* run SQL query */
$result = mysql_query($query) or die(mysql_error());
while ( $row = mysql_fetch_array( $result ) )
{
// Get the User
$tmp_user = new User();
$tmp_user->getUserById( $row['id'] );
// Add User to list of potential candidates
array_push($users, $tmp_user);
}