2011-09-26 75 views
0

我正在將我的第一個嘗試性步驟放入準備好的語句中(並且落在我的臉上)。將一個操作符作爲參數傳遞給odbc_execute()

Previousy,我從$ _GET構建了以下代碼並將其回顯 - 代碼工作正常,它返回了我對簡單測試數據庫的期望。

SELECT * FROM edit_box WHERE (tag="9") AND (text="mango") ORDER BY time_stamp DESC 

,當我嘗試編寫它使用aprepared聲明,即使我不使用$ _GET只是硬編碼從以前的值,我的代碼看起來像這樣

$odbc_query = OdbcPrepare('SELECT * FROM edit_box WHERE (tag="?")' . 
          ' AND (text ? "?") ORDER BY time_stamp DESC'); 

$odbcResult = odbc_exec($odbc_query, array('9', '=', 'mango')); 
var_dump($odbcResult); 

我得到NULL

顯然是一個線索n00b的錯誤,但我盯着它,仍然不說噢!

我在做什麼錯?

在此先感謝。

回答

1

你不能做到這一點 -

AND(文字嗎? 「?」)

參數,這樣,通常只能被傳遞的實際值 - 在某些情況下,標識符...

做你想做什麼,你需要在「=」行內插值到SQL語句...的

類,像這樣 -

$logical_operator = '='; 

$sql = SELECT * FROM edit_box WHERE (tag=\"?\") AND (text $logical_operator \"?\") ORDER BY time_stamp DESC'); 

$odbc_query = OdbcPrepare($sql); 

$odbcResult = odbc_exec($odbc_query, array('9', 'mango')); 
+0

+1和答案。謝謝!相信我在第一次進入準備好的語句時遇到異常:-)碰巧,+(或<>)是允許用戶選擇比較的列表框的值,不受用戶操縱。 Woudl可以安全地說,我只需要用戶輸入參數,其中HTML表示輸入類型=「text」 – Mawg

相關問題