0

我正在尝试使用 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 数据库。

4

3 回答 3

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);

希望其他人觉得这很有用

于 2014-02-13T21:42:47.970 回答
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 子句的正确值。

于 2012-10-04T19:11:15.173 回答
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()的更多信息

于 2012-10-04T19:02:47.827 回答