PHP odbc_prepare WHERE field IN ($LIST) - (Progress 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 驱动程序连接到进度数据库。

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

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

希望其他人觉得这有用

看起来你正在尝试以一种奇怪的方式使用 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()的更多信息

从手册中阅读,我认为它应该看起来像这样:

$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 子句的正确值。

最新更新