当前位置: 首页 > 知识库问答 >
问题:

使用bindParam创建mySQL查询时出现“无效参数号”错误

令狐昂雄
2023-03-14

我编写了一个函数,它接受四个参数,并使用PDO将它们传递给我的MySQL数据库。

我正在尝试使用bindParam,这样我就可以使用变量来构造查询。我遵循了PHP文档中的示例,但我得到了以下错误:

错误:SQLState[HY093]:参数号无效:未绑定任何参数

我做错了什么?

function saveAddress($addressLine1, $addressLine2, $town, $county_id) {

    try {
        $conn = new PDO('mysql:host=localhost;dbname=' . DB_DATABASE, DB_USER, DB_PASSWORD);
        $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        $stmt = $conn->prepare('INSERT INTO address (`address_line_1`, `address_line_2`, `town`, `county_id`)
            VALUES (:addressLine1, :addressLine2, :town, :county_id);');
        $stmt->bindParam(':addressLine1', $addressLine1, PDO::PARAM_STR);
        $stmt->bindParam(':addressLine2', $addressLine2, PDO::PARAM_STR);
        $stmt->bindParam(':town', $town, PDO::PARAM_STR);
        $stmt->bindParam(':county_id', $county_id, PDO::PARAM_INT);     
        $success = $stmt->execute(array());
    }
    catch(PDOException $e) {
        echo 'ERROR: ' . $e->getMessage();
    }
}

共有1个答案

钱澄邈
2023-03-14

$stmt->execute接受一个可选的数组参数,它表示要绑定在准备好的状态中的值。

由于您是显式调用bindParam,因此不需要传入数组param来执行。

作为附带说明,如果将来您选择使用array选项而不是调用bindParam,请注意该数组中的每个值都将使用pdo::param_str绑定。

 类似资料:
  • 当我试图在python中从谷歌云实现BigQuery插槽预留时,我遇到了这个错误,如下所述:https://cloud.google.com/python/docs/reference/bigqueryreservation/latest/google.cloud.bigquery_reservation_v1.services.reservation_service.ReservationSer

  • 创建一个函数,但它给出的错误数据库表如下所示

  • 下面包含一个本机查询,我需要在其中设置一个参数,但是由于没有设置参数,所以该查询是错误的 所以返回所有行。怎么了

  • 我正在用MySQL数据库构建一个django应用程序。当我第一次运行“Python Manage.py Migrate”时,一些表创建得很好,然后出现一些错误。引出的错误是: 完整的回溯是:

  • 目标:我尝试使用Java数据库连接器(JDBC)教程。我目前正处于这一步。 错误:在我有JDBC教程的目录中使用shell,我输入,并得到以下错误: buildfile:/users/adam/desktop/jdbctutorial/build.xml 再次感谢!

  • 问题内容: 我已经阅读了有关如何编写这些查询的多个示例,但是我正在努力使此特定代码像在使用时运行 这是匹配以a开头的用户名的正确方法吗? 问题答案: 不,您不需要内部单引号 您现在正在运行的语句将尝试匹配而不是匹配 bindParam将确保在将所有字符串数据提供给SQL语句时自动正确引用。