绑定参数错误:致命错误:未捕获的 PDOException:SQLSTATE[HY093]:参数编号无效:参数未在

时间:2020-12-19 06:41:58

标签: php mysql

我有一个非常简单的表单,其中包含 php 代码,可以将数据插入到数据库中。如果我在不绑定参数的情况下运行它,它可以完美运行,但是一旦我绑定它们,我就会收到一个错误:致命错误:未捕获的 PDOException:SQLSTATE[HY093]:无效的参数编号:参数未定义。

我的代码如下:

<?php
include('../../functions/database.php');

$conn = create_connection();

$id = $_POST['id'];
$intId = intval($id);
$name = $_POST['name'];
$address1 = $_POST['address1'];
$address2 = $_POST['address2'];
$address3 = $_POST['address3'];
$address_town = $_POST['address-town'];
$address_country = $_POST['address-country'];

$stm = "INSERT INTO company_address (name, company_id, address_1, address_2, address_3, address_town, address_country) values(:name, $intId, :address1, :address2, :address3, :address-town, :address-country)";

$query = $conn->prepare($stm);
$query->bindValue(':name',htmlspecialchars($name, ENT_QUOTES));
$query->bindValue(':address1',htmlspecialchars($address1, ENT_QUOTES));
$query->bindValue(':address2',htmlspecialchars($address2, ENT_QUOTES));
$query->bindValue(':address3',htmlspecialchars($address3, ENT_QUOTES));
$query->bindValue(':address-town',htmlspecialchars($address_town, ENT_QUOTES));
$query->bindValue(':address-country',htmlspecialchars($address_country, ENT_QUOTES));
var_dump($query);
$query->execute();
header('Location: ' . $_SERVER['HTTP_REFERER']);
?>

谁能看到错误?

1 个答案:

答案 0 :(得分:0)

连字符 "-" 是 pdo sql 解析器的保留字符,因此不能在占位符名称中使用,因此 address-town 和 address-country 是无效名称并导致上述错误。

仅使用字母数字字符和下划线。

<块引用>

a-zA-Z0-9_

保留字符:

<块引用>

:?"'-/

查看文档 https://github.com/php/php-src/blob/master/ext/pdo/pdo_sql_parser.re