Php PDO ODBC未将值应用于查询中的参数

Php PDO ODBC未将值应用于查询中的参数,php,pdo,odbc,unixodbc,Php,Pdo,Odbc,Unixodbc,我试图发出一个SQL查询,其中包含LIKE子句的参数化值。使用PDO ODBC查询将返回成功和空结果集。使用odbc_*()函数,我得到了预期的结果集 没有参数的查询按预期工作 这是通过Ubuntu系统上的unixODBC实现的 我更愿意使用PDO函数并利用OOP实现、更现代的获取选项等 环境: Ubuntu 14.04 PHP 5.5.9 unixODBC 2.2.14 康涅狄格州12号 我已经创建了一个非常简单的示例,显示PDO ODBC显然没有使用参数 我用这个短得多的例子替换了我原来

我试图发出一个SQL查询,其中包含LIKE子句的参数化值。使用PDO ODBC查询将返回成功和空结果集。使用odbc_*()函数,我得到了预期的结果集

没有参数的查询按预期工作

这是通过Ubuntu系统上的unixODBC实现的

我更愿意使用PDO函数并利用OOP实现、更现代的获取选项等

环境

  • Ubuntu 14.04
  • PHP 5.5.9
  • unixODBC 2.2.14
  • 康涅狄格州12号
我已经创建了一个非常简单的示例,显示PDO ODBC显然没有使用参数

我用这个短得多的例子替换了我原来的例子

// A value for the parameter
$desc = 'xyzzy';

//
// Using odbc_*( ) Functions with Connx
//
$db   = odbc_connect( ... );
$stmt = odbc_prepare( $db, "SELECT LENGTH( ? ) AS result" );
$sts  = odbc_execute( $stmt, [ $desc ] );
echo "Result using odbc_connect(): ", odbc_fetch_array( $stmt, 1 )['result'], PHP_EOL;    

//
// Using PDO:ODBC with Connx and positional parameter
//
$db   = new PDO( ... );
$stmt = $db->prepare( "SELECT LENGTH( ? ) AS result" );
$stmt->execute( [ $desc ] );
echo 'Result using PDO:ODBC with Connx and positional parameter : ', $stmt->fetchColumn(), PHP_EOL;

//
// Using PDO:ODBC with Connx
//
$db   = new PDO( ... );
$stmt = $db->prepare( "SELECT LENGTH( :desc ) AS result" );
$stmt->execute( [ ':desc' => $desc ] );
echo 'Result using PDO:ODBC with Connx and named parameter : ', $stmt->fetchColumn(), PHP_EOL;
结果:

如果您在PDO MySQL中尝试此操作,您将得到一个致命错误,即本机函数长度的参数计数不正确

这可能是PDO中的一个bug吗

建议


谢谢。

我将逐行比较运行相同查询获得的unixODBC跟踪与PDO(选项1)和odic_*(选项2)的结果。它们不可能是一样的……我相信这是Ubuntu 14.04下PHP/PDO 5.5.9中的一个bug。我已经升级到PHP7(无论如何都计划这么做),这个问题就消失了。我会逐行比较运行PDO(选项1)和odic(选项2)的同一个查询获得的unixODBC跟踪。它们不可能是一样的……我相信这是Ubuntu 14.04下PHP/PDO 5.5.9中的一个bug。我已经升级到PHP7(无论如何都计划这么做),这个问题就消失了。
Result using odbc_connect(): 5
Result using PDO:ODBC with Connx and positional parameter : 0
Result using PDO:ODBC with Connx and named parameter : 0