0

我在将 PHP PDO 接口与 Microsoft SQL Server 一起使用时遇到问题。问题在于将 PHP 数值转换为在 MS SQL Server 的函数中使用。我使用以下语句删除某些记录:

$sql = "DELETE FROM table WHERE SUBSTRING(attribute, 1, ?) = ?";

我用代码准备并执行这个语句(有点缩小):

$query = $pdo->prepare ($sql);
$query->execute (array (strlen ('Text'), 'Text')); 

但是查询总是失败。错误是:

SQLSTATE[42000]:[Microsoft][SQL Server Native Client 11.0][SQL Server]参数数据类型 nvarchar 对子字符串函数的参数 3 无效。

我假设来自 strlen 的数字没有被解析成数字,但我不知道如何解决这个问题(除了手动添加到查询中)。

我找到了这些链接,但不是很有帮助。

http://social.msdn.microsoft.com/Forums/en-US/sqldriverforphp/thread/0f09ac5e-62cd-4ccf-b2cb-848aad23811e

http://drupal.org/node/1169202

Drupal 上的人也有同样的错误,但他们通过强制转换重新创建函数来修复它。有没有其他方法可以解决这个问题?

谢谢。

4

2 回答 2

0

不知道这是否会解决它,但尝试这样的事情

$length = strlen('Text');
$text = "Text";

$sql = "DELETE FROM table WHERE SUBSTRING(attribute, 1, :len) = :text";
$query = $pdo->prepare ($sql);
$query->bindParam(':len', $length, PDO::PARAM_INT);
$query->bindParam(':text', $text, PDO::PARAM_STR);
$query->execute(); 
于 2012-06-09T23:23:56.143 回答
0

尝试:

$query = $pdo->prepare ($sql);
$query->execute (array ((int) strlen ('Text'), 'Text')); 
于 2012-06-10T00:41:08.457 回答