2012-06-06 2 views
1

Я весь день искал ошибку в своем коде. Вот длинный и короткий:Необходимая синтаксическая помощь PHP/MySQL

У меня есть переменная, которая проходит через строку запроса, и я хочу использовать эту переменную в моем запросе MySQLi. A-like so:

$variable; 

$info = dbConnect('query'); 
$eInfo = "SELECT * 
FROM tablename 
WHERE fieldname = '$variable%'"; 
$eiData = $info->query($eInfo) or die(mysqli_error()); 
$eInfo = $eiData->fetch_assoc(); 

Акцент делается на% после имени переменной. Я не эксперт по PHP, но я помню, как я собрал этот трюк некоторое время назад, и он работал для меня на всех моих веб-сайтах, основанных на БД, ИСКЛЮЧАЕТ новую, которую я разрабатываю.

Вышеприведенный запрос не возвращает данных из таблицы.

НО ...

если опустить% следующим образом:

$variable; 

$info = dbConnect('query'); 
$eInfo = "SELECT * 
FROM tablename 
WHERE fieldname = '$variable'"; 
$eiData = $info->query($eInfo) or die(mysqli_error()); 
$eInfo = $eiData->fetch_assoc(); 

Запрос выполняется, и я получаю мои данные.

ПОЧЕМУ после записи запросов, в которых я хочу использовать переменную, используя синтаксис «$ variable%», это перестало бы работать? Просто отбрасывание% ('$ variable') заставляет его работать A-OK, что сильно меня озадачивает.

Для чего это стоит, я запускаю выделенный сервер, и suPHP был недавно установлен, если у него есть какой-либо отдаленный шанс помочь мне здесь (PHP 5.2.17 - это моя текущая версия).

Опять же, я не PHP whiz, но после проверки формы кода старых сайтов, которые я сделал с MySQLi-запросами,% всегда присутствовал при добавлении переменной в запрос.

Я полностью мертв в воде здесь. Любая помощь, которую вы можете предоставить, будет настолько безумно оценена, что она не поддается объяснению.

+1

Вы думаете о текстовых полях с условием 'field LIKE 'значение%'' вместо 'field = 'value%''? '%' является подстановочным знаком с 'LIKE', но это буквально с' = '. – Wiseguy

+1

Кроме того, если вы выбрали эту переменную непосредственно в запросе, то вы уязвимы для SQL-инъекции. [Привязать параметры] (http://us3.php.net/manual/en/mysqli-stmt.bind-param.php) с параметризованным запросом. (См. Пример по ссылке.) – Wiseguy

+0

@Wiseguy - Как вы делаете запрос db без передачи переменной напрямую? – valen

ответ

0

если вы хотите поместить переменные в строке, где интерпретирующей где имя переменного заканчивается трудно, используйте {$var} так:

$eInfo = "SELECT * FROM tablename WHERE fieldname LIKE '{$variable}%'"; 
0

% является символом для LIKE запросов. Поэтому, если вы используете % в запросе с WHERE var = 'cow%', он будет искать базу данных для строковой строки cow%.

  1. cow
  2. cows
  3. cow% (совпадение)
  4. the cow

В Like запроса: WHERE var LIKE 'cow%' следующий будет соответствовать:

  1. cow (матч)
  2. cows (матч)
  3. cow% (матч)
  4. the cow

См MySQL Pattern Matching.

Смежные вопросы