6

コラムがありますurl(nvarchar(200), not null)

<?php
//
$pdo = new PDO('odbc:mssql', 'xxx', 'yyy');
$pdo->setAttribute(PDO::ATTR_PERSISTENT, false);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);

// plain sql query: WORKS FINE!
$sth = $pdo->prepare("SELECT COUNT(*) FROM pagina WHERE url = '/webito'");
$sth->execute();

// using bindValue: ERROR!
$sth = $pdo->prepare("SELECT COUNT(*) FROM pagina WHERE url = :unique_value");
$sth->execute(array('unique_value' => '/webito'));

戻りエラー:

Warning: PDOStatement::execute(): SQLSTATE[42000]: Syntax error or access violation: 402 [FreeTDS][SQL Server]The data types nvarchar and text are incompatible in the equal to operator. (SQLExecute[402] at /builddir/build/BUILD/php-5.4.15/ext/pdo_odbc/odbc_stmt.c:254) in /root/php/test.php on line 13

これはバグですか?

使用: php 5.4.15、unixodbc 2.2.14、freetds 0.91、sql-server-2012、centos-x64 6.4

アップデート:

バグのようです。このパッチを見つけましたが、 ODBC Driver 11 for SQL Serverでしか動作しません (FreeTDS で試しましたが、うまくいきませんでした)。このパッチを適用してソースから PHP をインストールし、FreeTDS から ODBC Driver 11 for SQL Server に変更しました。今働いています。

  • PHP 5.4.15
  • unixODBC 2.3.0
  • ODBC ドライバー 11 for SQL Server
  • sql-server-2012
  • centos-x64 6.4
4

2 に答える 2