【问题标题】:How i can remove this error: PDOException: SQLSTATE[HY093]: Invalid parameter number: parameter was not defined如何消除此错误:PDOException: SQLSTATE[HY093]: Invalid parameter number: parameter was not defined
【发布时间】:2014-12-07 13:13:30
【问题描述】:

我有这个错误:PDOException: SQLSTATE[HY093]: Invalid parameter number: parameter was not defined.

这是代码:

$query = "INSERT INTO ucp_beschwerde (date, tat_name, opfer_name, vergehen, content, one-url, two-url, three-url) VALUES (:date, :tat_name, :opfer_name, :vergehen, :content, :one-url, :two-url, :three-url)";
$smt = $db->prepare($query);
$smt->execute(array(':date' => $date, ':tat_name' => $_POST['beschuldigter'], ':opfer_name' => $aaa['Name'], ':vergehen' => $_POST['vergehen'], ':content' => $_POST['content'], ':one-url' => $_POST['one-bild'], ':two-url' => $_POST['two-bild'], ':three-url' => $_POST['three-bild']));

【问题讨论】:

  • - 不是标识符中的有效字符。考虑改用_
  • 您传递给执行的变量之一可能未定义,使用 var_dump 将它们全部转储以查看值
  • 这些one-url, two-url, three-url 需要用反引号包裹` - SQL 认为你想做数学,这被默默地 解释为“一个减网址”等。

标签: php mysql pdo


【解决方案1】:

包含连字符的表和列必须用反引号括起来。

SQL 认为您想要进行数学运算,这被默默地解释为“one minus url”等。

因此,您可以将代码更改为以下内容:

(date, tat_name, opfer_name, vergehen, content, `one-url`, `two-url`, `three-url`)

或通过将连字符更改为下划线 _ 来重命名列。

(date, tat_name, opfer_name, vergehen, content, one_url, two_url, three_url)

有关标识符的更多信息,请访问:

引用手册:

If any components of a multiple-part name require quoting,  
quote them individually rather than quoting the name as a whole.  
For example, write `my-table`.`my-column`, not `my-table.my-column`.

另见Bill Karwin's answer

摘自比尔的回答:

是的,如果您使用分隔标识符,您可以使用标点符号、空格、国际字符和 SQL 保留字:

SELECT * FROM `my-table`;

在 MySQL 中,使用反引号。在标准 SQL 中,使用双引号。

或者如果你使用 MySQL 你可以设置ANSI_QUOTES SQL mode:

SET SQL_MODE = ANSI_QUOTES;
SELECT * FROM "my-table";

在打开连接后立即添加$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);,如果您还没有这样做的话。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-03-19
    • 2018-04-22
    • 2019-10-08
    • 2023-03-18
    • 1970-01-01
    • 1970-01-01
    • 2015-07-07
    • 1970-01-01
    相关资源
    最近更新 更多