PHP odbc_prepare WHERE字段IN($ LIST) - (Progress OpenEdge 10.2A)

时间:2012-10-04 18:54:58

标签: php sql odbc openedge

我正在尝试使用odbc_prepare和odbc_execute语句编写查询,如下所示:

$query = 'SELECT * FROM TABLE WHERE names IN (?) AND age < ?';
$names = "Joe, John, Billy";
$age = 21;
$result = odbc_prepare($this->connection, $query);
odbc_execute($query, array($names, $age));

当然由于某些原因,这不起作用,我已经尝试了我的$ names变量格式的几个变体。任何帮助将不胜感激,因为我无法找到任何使用odbc_prepare和WHERE IN子句的查询示例。

我使用OpenEdge 10.2A odbc驱动程序连接到Progress数据库。

3 个答案:

答案 0 :(得分:2)

只是为了让将来的每个人都知道我为这个特殊问题想出了什么:

$names = array("Joe","John","Billy");

$queryVars = array();
foreach($names AS $name){
    $queryVars[] = $name;
}

$paramBind = implode(',', array_fill(0, count($names), '?'));
$query = 'SELECT * FROM TABLE WHERE names IN ('.$paramBind.')';

odbc_execute($query, $queryVars);

希望别人找到这个有用的

答案 1 :(得分:0)

您似乎试图以奇怪的方式使用array()

尝试做类似的事情:

$names = array("Joe", "John", "Billy");
foreach($names as $name)
{   
    $query = 'SELECT * FROM TABLE WHERE names IN (?)'
    $result = odbc_prepare($this->connection, $name);
    odbc_execute($query, $name);
}

以下是有关odbc_prepare()

的更多信息

答案 2 :(得分:0)

从手册中读到我认为它应该是这样的:

$query = 'SELECT * FROM TABLE WHERE names IN (?)'
$names = array("Joe", "John", "Billy");
$result = odbc_prepare($this->connection, $query);
odbc_execute($query, array(implode(',', $names));

这给出了一个包含1个元素的数组,因为有1个参数被请求。 该元素包含一个字符串'Joe, John, Billy',这是IN子句的正确值。