【问题标题】:MySQL rejecting parameterMySQL拒绝参数
【发布时间】:2009-09-22 00:41:53
【问题描述】:

好吧,我要疯了。 MySQL 对这部分 SQL 很感兴趣:

INSERT INTO `test_table` 
  ( `column1`, `column2` ) 
VALUES 
  ( ?COURSEID, ?COURSENAME )

您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的“COURSENAME)”附近使用正确的语法

我的调试代码显示两个参数值都已填充。

【问题讨论】:

  • 了解正在执行的确切 SQL 而不是那些占位符值会很有帮助...

标签: sql mysql parameters


【解决方案1】:

MySQL 不支持命名参数占位符。您可以使用 only 位置参数占位符。也就是说,占位符只是一个? 符号。

顺便说一句,这符合 ANSI SQL 行为。类似 Oracle 的 RDBMS 支持命名参数作为标准的扩展。

【讨论】:

  • 比尔,我相信你已经发现了问题所在。过去,我在 MySQL 中使用了命名参数,但我只在 .NET 的 MySQL 驱动程序中使用过。在这种情况下,我使用的是 ODBC 驱动程序,我感觉它处理命名参数的方式并不完全相同。感谢您的提醒,我不知道命名参数不是 SQL 的正式组成部分。
  • 对,如果 .NET 驱动程序支持命名参数,它必须在将查询字符串发送到 MySQL 服务器之前重写查询字符串。 PHP 的 PDO 库做了类似的事情,因此您可以在任何后端使用命名参数,即使它不支持命名参数。但是很难正确地进行这种查询重写,例如字符串文字可能包含看起来像参数占位符的字符,因此驱动程序中的查询解析必须足够聪明才能区分。
【解决方案2】:

不确定这是否可行。我会改成任何一个

值 (?, ?)

值 (:COURSEID, :COURSENAME)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-03
    • 2021-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多