2013-06-19 2 views
1

У меня есть следующий код:Поместите переменную PHP в SQL Query

try 
{ 
    $sql = 'SELECT id, type, date, amount, description, category 
FROM `transactions` 
    WHERE type = "income" 
    AND month(date) = '$monthselect' 
    ORDER BY `transactions`.`id` DESC 
    LIMIT 0,50'; 
    $result2 = $pdo->query($sql); 
} 

Теперь я хочу дать эту month(Date) переменную, которую месяц я хочу, чтобы выбрать. если я стану 1, это даст мне январь. Так я думал, если я определяю переменную с 1, я могу использовать ее, чтобы выбрать месяц, не так ли?

$monthselect = 1; 

Не работает. Что я делаю не так?

+1

Вы используете одинарные кавычки как в своем запросе, так и в качестве разделителей строк. Это просто запутается. Поскольку вы используете PDO, почему бы не взглянуть на использование подготовленного оператора и связанный параметр? – andrewsi

+0

Каков тип поля вашей «даты»? –

ответ

3

Использование подготовленных операторов:

$stm = $pdo->prepare('SELECT id, type, date, amount, description, category 
FROM `transactions` 
    WHERE type = "income" 
    AND month(date) = ? 
    ORDER BY `transactions`.`id` DESC 
    LIMIT 0,50'); 

$stm->execute(compact('monthselect')); 
$result2 = $stm->fetchAll(); 

Поскольку вы не добавляя «1» прямо в запросе, я предполагаю, что здесь, что переменная приходит от пользовательского ввода.

+0

Это сработало для меня :) спасибо alot – user2502755

+0

, то, пожалуйста, отметьте его как решение @ user2502755 –

1

Чтобы объединить строки в PHP, вам необходимо использовать. оператор.

$sql = 'SELECT id, type, date, amount, description, category 
    FROM `transactions` 
    WHERE type = "income" 
    AND month(date) = ' . $monthselect . ' 
    ORDER BY `transactions`.`id` DESC 
    LIMIT 0,50'; 
1

Я часто использовать двойные кавычки, чтобы заменить переменные в PHP:

$sql = "SELECT id, type, date, amount, description, category 
    FROM `transactions` 
    WHERE type = 'income' 
    AND month(date) = $monthselect 
    ORDER BY `transactions`.`id` DESC 
    LIMIT 0,50"; 

Обратите внимание, что вам нужно поменять существующие двойные кавычки (внутри строки) в одинарные кавычки. Вы также можете избежать их, но я нахожу этот способ, что делает его более читаемым.

1

Ваш вопрос в том, что вы пытаетесь использовать переменную внутри одинарные кавычки, внутри которых PHP не переведенный

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

$sql = "SELECT id, type, date, amount, description, category 
FROM `transactions` 
WHERE type = 'income' 
AND month(date) = $monthselect 
ORDER BY `transactions`.`id` DESC 
LIMIT 0,50"; 
+1

Лучше всего удалить одинарные кавычки вокруг '$ monthselect', хотя это целое число и должно сравниваться с' MONTH() 'как таковое , –

+1

... и вам нужно избежать двойных кавычек вокруг «дохода» или заменить их одинарными кавычками. Как бы то ни было, это приведет к ошибке Parse. https://eval.in/34178 –

+0

Спасибо @ThomasKelley, я внес эти поправки в свой ответ –

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