2013-06-19 135 views
1

我有以下代碼:把一個PHP變量在SQL查詢

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定義一個變量,我可以用它來選擇一個月,對吧?

​​

它不工作。我究竟做錯了什麼?

+1

您在查詢中使用了單引號,並且使用了單引號作爲字符串分隔符。這隻會讓人困惑。由於您使用的是PDO,爲什麼不使用預準備語句和綁定參數呢? – andrewsi

+0

'date'的字段類型是什麼? – 2013-06-19 20:05:07

回答

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

這對我有用:)非常感謝 – 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的值周圍使用單引號mark

$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

...並且您需要避開'收入'周圍的雙引號,或者用單引號替換它們。事實上,這會導致一個分析錯誤。 https://eval.in/34178 –

+0

感謝@ThomasKelley我做了那些修改我的答案 –