PHP ODBC PDO bindParam导致;必须声明标量变量@P1";

PHP ODBC PDO bindParam导致;必须声明标量变量@P1";,php,pdo,odbc,azure-sql-database,Php,Pdo,Odbc,Azure Sql Database,长话短说,我需要使用PHP、PDO和ODBC连接到Microsoft Azure数据库。但是,我无法在查询中使用参数,而不会出现以下错误(我已删除了一些信息) 这是我的密码: // Establish connection $db = new \PDO($dsn, $user, $password); $lastName = '%{Bank2}%'; // Option 1 - Does not work $query = "SELECT *

长话短说,我需要使用PHP、PDO和ODBC连接到Microsoft Azure数据库。但是,我无法在查询中使用参数,而不会出现以下错误(我已删除了一些信息)

这是我的密码:

    // 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();
我已尝试将param类型添加到绑定
$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上运行的:


也许你可以参考这个例子::


你也可以参考这个问题的答案:,其他人给了我们更多的指导


HTH.

您可能会发现一些参数设置错误的语句。请参考教程:。它给出了带有参数的查询/更新示例。感谢您的文章,但似乎没有帮助。这是一个SQL Server数据库,不是PostgreSQL。它无法连接@LeonYueHi@aceithamer,很抱歉发布了错误的链接,请参考此示例:。Hi@sceithamer,希望你做得很好,你有什么进展吗?如果答案对你有帮助,希望你能接受它作为答案。这可能对其他社区成员有益。如果您已经解决了这个问题,欢迎向我们分享细节,我们可以向您学习。非常感谢。
    $query = "SELECT * FROM contact WHERE lastName LIKE '%Bank2%'";
    $prep = $db->prepare($query);
    $prep->execute();
    $results = $prep->fetchAll(PDO::FETCH_ASSOC);
./configure --with-pdo-odbc=unixODBC,/usr/local
<?php
/* Execute a prepared statement by binding PHP variables */
$calories = 150;
$colour = 'red';
$sth = $dbh->prepare('SELECT name, colour, calories
    FROM fruit
    WHERE calories < ? AND colour = ?');
$sth->bindParam(1, $calories, PDO::PARAM_INT);
$sth->bindParam(2, $colour, PDO::PARAM_STR, 12);
$sth->execute();
?>