mysql_query("SELECT * FROM foo WHERE id ='$foo' OR id = '$foo2");
Это не работает.
В основном, я хочу, чтобы иметь возможность выбрать его, где id – значение одной переменной ИЛИ другое.
Благодарю.
EDIT: столбец ID является числовым.
Как говорили другие, и вы подтвердили, проблема в том, что вы используете строковые литералы для сравнения с числовым столбцом. Чтобы он работал, запрос должен выглядеть так:
mysql_query("SELECT * FROM foo WHERE id =$foo OR id = $foo2");
Однако это решение имеет очень плохой запах кода!
Во-первых, вот почему IN
существует: уметь писать
mysql_query("SELECT * FROM foo WHERE id IN ($foo, $foo2)");
И, во-вторых, вы вводите в запросе строки без привязки? Если вы, ваш код уязвим для SQL-инъекций ! Бегите и цитируйте свои переменные, чтобы быть в безопасности, как это (в общем случае):
$query = sprintf("SELECT * FROM foo WHERE id IN ('%s', '%s')", mysql_real_escape_string($foo), mysql_real_escape_string($foo2)); mysql_query($query);
или, альтернативно, как это, поскольку в этом конкретном сценарии вы знаете, что мы говорим о целочисленных значениях:
$query = sprintf("SELECT * FROM foo WHERE id IN (%s, %s)", intval($foo), intval($foo2)); mysql_query($query);
Сноска: Я знаю, что при использовании sprintf
как это, можно также обрабатывать целочисленные значения, просто используя %d
вместо if %s
в качестве спецификатора формата. Тем не менее, я считаю, что доказать, что вы правильно избегаете переменных, должно быть возможным, просто взглянув на одно место (список параметров) вместо нескольких мест (я использовал intval
для переменной? Или, может быть, я этого не сделал, но я использую %d
в строке формата, так что я все еще в порядке?). Это может показаться противоречивым, но оно более устойчиво перед лицом модификаций.
Я думаю, вы забыли последнего 'персонажа
mysql_query("SELECT * FROM foo WHERE id ='$foo' OR id = '$foo2'");
но поскольку столбец id является числовым, вы должны использовать:
mysql_query("SELECT * FROM foo WHERE id = $foo OR id = $foo2");
Попробуй это:
mysql_query(sprintf("SELECT * FROM foo WHERE id = %s OR id = %s", $foo, $foo2));
Я рекомендую использовать mysql_error () для получения mysql-ошибок (если существует).
mysql_query( .. ) or die('Erro:'.mysql_error());
mysql_error возвращает последнюю ошибку, возникшую в mysql.