我正在尝试使用 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
子句的正确值。