php - 使用 bindParam 创建 MySQL 查询时出现“无效参数编号”错误

标签 php mysql pdo

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

我正在尝试使用 bindParam 以便我可以使用变量来构造查询。

我已按照 PHP 文档中的示例进行操作,但出现以下错误:

错误:

SQLSTATE[HY093]: Invalid parameter number: no parameters were bound

我做错了什么?

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();
    }
}

最佳答案

$stmt->execute 接受一个可选的数组参数,该参数表示要在准备好的语句中绑定(bind)的值。

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

请注意,如果您将来选择使用数组选项而不是调用 bindParam,请注意该数组中的每个值都将使用 PDO 进行绑定(bind)::PARAM_STR

关于php - 使用 bindParam 创建 MySQL 查询时出现“无效参数编号”错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20819686/

相关文章:

python - 在 Red Hat 上使用 MySQL 连接器安装 Python

php - mysql如何进行多表操作?

php - PDO bindParam 与执行

php - 未捕获的 PDOException

php - 找不到类 'mysqli' PHP v5.6.7

php - 我必须在 Composer 要求之前使用 init 吗?

PHP复制mysql模式和数据

php - 网络移动应用程序 Facebook OAuth

php - 初始化未定义的命名空间

php - 如何对三个表运行两个查询并输出一个表中某一列的结果