【发布时间】:2021-06-28 20:42:05
【问题描述】:
长话短说,我需要使用 PHP、PDO 和 ODBC 连接到 Micrsoft Azure 数据库。但是我无法在查询中使用参数而不会出现以下错误(我已经删除了一些信息)。
[Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Must declare the scalar variable "@P1".
RequestId: TDS;;7
Time: (SQLExecute[40000] at /ext/pdo_odbc/odbc_stmt.c:259)'
这是我的代码:
// Establish connection
$db = new \PDO($dsn, $user, $password);
$lastName = '%{Bank2}%';
// Option 1 - Does not work
$query = "SELECT * FROM contact WHERE lastName LIKE ?";
$prep = $db->prepare($query);
$prep->execute([$lastName]);
$results1 = $prep->fetchAll(PDO::FETCH_ASSOC);
$error1 = $prep->errorInfo();
// Option 2 - Does not work
$query = "SELECT * FROM contact WHERE lastName LIKE ?";
$prep = $db->prepare($query);
$prep->bindParam(1, $lastName);
$prep->execute();
$results2 = $prep->fetchAll(PDO::FETCH_ASSOC);
$error2 = $prep->errorInfo();
// Option 3 - Does not work
$query = "SELECT * FROM contact WHERE lastName LIKE :lastName";
$prep = $db->prepare($query);
$prep->bindValue(':lastName', $lastName);
$prep->execute();
$results3 = $prep->fetchAll(PDO::FETCH_ASSOC);
$error3 = $prep->errorInfo();
我已尝试将参数类型添加到绑定 $prep->bindValue(':lastName', $lastName, PDO::PARAM_STR) 中,但没有解决任何问题
我知道我的连接很好,因为以下查询可以正常工作并返回结果:
$query = "SELECT * FROM contact WHERE lastName LIKE '%Bank2%'";
$prep = $db->prepare($query);
$prep->execute();
$results = $prep->fetchAll(PDO::FETCH_ASSOC);
关于为什么这不起作用的任何想法?
这是使用 PHP 安装说明在 PHP 7.4.5 上运行的:https://www.php.net/manual/en/ref.pdo-odbc.php
./configure --with-pdo-odbc=unixODBC,/usr/local
【问题讨论】:
-
似乎您对参数设置有一些语句错误。请参考教程:docs.microsoft.com/en-us/azure/postgresql/…。给出了带参数查询/更新的例子。
-
感谢您的文章,但似乎没有帮助。这是一个 SQL Server 数据库,而不是 PostgreSQL。它不会连接。 @LeonYue
-
嗨@aceithamer,很抱歉发布了错误的链接,请参考这个例子:c-sharpcorner.com/article/…。
-
嗨@sceithamer,希望你做得很好,你有任何进展吗?
-
如果回答对你有帮助,希望你能采纳。这对其他社区成员可能是有益的。如果您已经解决了这个问题,欢迎与我们分享细节,我们可以向您学习。谢谢。
标签: php pdo odbc azure-sql-database