2011-09-26 120 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

相关问题