2016-03-21 4 views
-2

У меня возникли проблемы с тем, чтобы мои переменные работали в запросе MySQL. Я сделал это раньше, но почему-то не работает. Я, вероятно, что-то пропустил, но не могу понять, может ли кто-нибудь мне помочь?PHP-переменные, не работающие в запросе MySQL

Мой код

$cat = "Fashion"; 

$article = db::getInstance()->query("SELECT * FROM articles WHERE category = $cat ORDER BY views"); 

if($article->results(){ 
echo 'success!'; 
} 
else{ 
echo 'no'; 
} 

я должен получать «успех» вторит из, но вместо этого я получаю «нет»; Мода - это категория в моем db, поэтому не знаю, почему это не работает для меня.

+2

Вы пытались включить переменную в одинарные кавычки? 'WHERE category = '$ cat'' и т. Д. – Ben

+1

' views' 'отсутствует скобка и точка с запятой => http://php.net/manual/en/function.error-reporting.php и двоеточие' echo ' no ': 'вместо sem-colon.' if ($ article-> results() {'отсутствует скобка. Поэтому не спрашивайте себя, почему ваш код не работает. –

+1

Вы получаете' 'no'', потому что это что вы запрограммировали систему, чтобы показать вам, когда есть ошибка. Возможно, вы также попытаетесь получить фактическую ошибку из объекта базы данных, я уверен, что она пытается рассказать вам, почему запрос не удался. (Хотя показанный код не будет работать по нескольким причинам , так что я подозреваю, что это даже не код, который вы используете) в конечном счете, использовать подготовленные операторы с параметрами запроса, а не непосредственно конкатенации значений и этот синтаксис/процитировать ошибка становится спорным – David

ответ

2
$article = db::getInstance()->query("SELECT * FROM articles WHERE category = $cat ORDER BY views" 

В этой строке отсутствует закрывающая скобка и точка с запятой.

Кроме того, переменная должна содержать в одинарных кавычках.

Изменение этой строки:

$article = db::getInstance()->query("SELECT * FROM articles WHERE category = '$cat' ORDER BY views"); 

Ваше if заявление также синтаксически неправильно. Закрыть скобку недостающее:

if($article->results(){ 

Colon вместо запятой:

echo 'no': 

Весь этот раздел должен выглядеть следующим образом:

if($article->results()) { 
    echo 'success!'; 
} else { 
    echo 'no'; 
} 

с немного очистки и ternary operators, это может выглядеть как:

echo $article->results() ? "success!" : "no"; 
+0

вы пропустили довольно много вещей,.. -) –

+0

На полпути через проект @ Fred-ii -... это будет длиннее моего тезиса ... – Ben

+0

Спасибо, человек, Это были только одинарные кавычки, которые я отсутствовал.И извините за недостающие полуколоны, я просто написал здесь грубо. – ShiggyDooDah

1

Прежде всего, я надеюсь, вы понимаете, что это уязвимо для SQL-инъекции, если вы не имеете полного контроля над входными переменными.

Во-вторых, переменная должна, вероятно, одиночные кавычки вокруг него, то есть

$article = db::getInstance()->query("SELECT * FROM articles WHERE category = '$cat' ORDER BY views"); 

Примечание Я также добавил недостающую ); от конца строки.

Наконец-то вы, кажется, пропустили еще ) в своем заявлении if.

+0

вы тоже что-то пропустили ;-) –

+0

Ах да, я не заметил ':'. Хорошее место @ Фред-и-. Удивительно, что этот код вообще ничего не выводил. – Chris

+0

Да, эта двоеточие подозрительна, потому что она потребует нажатия клавиши SHIFT и оба находятся на одном и том же ключе. Трудно сказать, если OP просто не пытается бросить всех мяч кривой ;-) –

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