2013-10-06 3 views
0

У меня есть следующее заявление:Как вставить переменную php в mysql-запрос?

SELECT bname,cnum,vnum, MATCH(vtext) AGAINST (''".$word."'') as relevance FROM kjv WHERE MATCH(vtext) AGAINST (''".$word."'') AND bnum='".$book."' ORDER by relevance DESC, bnum, cnum, vnum LIMIT 0,1"); 

который возвращает пустые строки, но если заменить переменные с закодированными значениями, все проходит. Переменные не являются нулевыми, я знаю, потому что я выводил их на страницу после ввода их в поле. Благодаря

+4

Независимо от того, можете ли вы заставить его работать или нет, этот метод непосредственного объединения строк в команду SQL очень * небезопасен. * Никогда * обрабатывайте ввод как код и слепо выполняйте его против базы данных. Вместо этого используйте подготовленные инструкции, которые обрабатывают ввод как значения вместо кода: http://php.net/manual/en/mysqli.prepare.php – David

ответ

-1

Попробуйте

mysql_query("SELECT bname,cnum,vnum, MATCH(vtext) AGAINST($word) as relevance FROM kjv WHERE MATCH(vtext) AGAINST ($word) AND bnum='$book' ORDER by relevance DESC, bnum, cnum, vnum LIMIT 0,1"); 
0

Было бы лучше, чтобы увидеть больше окружающего кода, но я ожидаю, что это двойные одинарные кавычки, вызывающие проблемы:

SELECT bname,cnum,vnum, MATCH(vtext) AGAINST ('".$word."') as relevance FROM kjv WHERE MATCH(vtext) AGAINST ('".$word."') AND bnum='".$book."' ORDER by relevance DESC, bnum, cnum, vnum LIMIT 0,1"); 
+4

Этот ответ устраняет проблему, но не отвечает более насущным проблемам (SQL-инъекция, преимущество использования параметризованных запросов ...) Ответ, который обрабатывает * те *, я бы увеличил :) –

+0

Downvoted по понятным причинам. Пожалуйста, используйте параметризованные запросы! – nietonfir

-1

Попробуйте так:

SELECT bname,cnum,vnum, MATCH(vtext) AGAINST ("$word") as relevance 
FROM kjv WHERE MATCH(vtext) AGAINST ("$word") AND bnum= "$book" 
ORDER by relevance DESC, bnum, cnum, vnum LIMIT 0,1"); 
0

Hi Try Это, если вы уже сохранили значение в переменной.

SELECT bname,cnum,vnum, MATCH(vtext) AGAINST ('$word') as relevance FROM kjv WHERE MATCH(vtext) AGAINST ('$word') AND bnum='".$book."' ORDER by relevance DESC, bnum, cnum, vnum LIMIT 0,1"); 
Смежные вопросы