【问题标题】:SQL Command Syntax ErrorsSQL 命令语法错误
【发布时间】:2017-05-22 12:02:46
【问题描述】:

我正在尝试编写一个 SQL 命令来更新数据库表中的一些信息,我正在使用基本的 PHP 变量将此信息添加到正确的列中。

我已经编写了很多类似的命令,但没有任何问题,但我一生都无法弄清楚为什么这会不断产生错误消息。

这是查询..

$sql = "UPDATE nexnum SET regexp = '{$regexp2}', regstatus = '{$regstatus}', expflag = '{$expflag}' WHERE duns = {$duns}";

我已经尝试过使用和不使用围绕变量的引号,我已经尝试将其分解为三个单独的命令/查询。这些变量在我的 PHP 代码中都可以正常工作。这是语法问题吗?

【问题讨论】:

  • 错误消息通常包含一些关于问题所在的提示。另外请使用参数化/准备好的查询,在查询中使用占位符可以使查询安全,您不必再担心查询中的引号和其他内容:)
  • 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的 'regexp = '2017-12-08', regstatus = 'ACTIVE', expflag = '1' WHERE duns = 04687848' 附近使用正确的语法
  • 您必须在最后一个用作 duns = {'$duns'} OR duns = '$duns' 的变量处添加单引号
  • @PavanBaddi OP 声明:“我已经尝试过使用和不使用围绕变量的引号” - 这不是导致该错误的原因,而是其他原因很明显。
  • near 'regexp - 错误告诉您问题所在。 @JohnC。

标签: php mysql sql


【解决方案1】:

在看到 cmets 线程后,看到另一个答案是隐身编辑的,我不得不说我重新打开了这个问题并决定发布我的答案。

取自OP's comment

您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以了解在 'regexp = '2017-12-08', regstatus = 'ACTIVE'...附近使用的正确语法...

注意它周围的“R” => REGEXP (R),它代表“Reserved”。

要么将其重命名为其他名称,要么在其周围使用刻度:

UPDATE nexnum SET `regexp`

“这个问题怎么是重复的?我在这个查询中没有使用任何保留字。——John C.”

答:这是一个保留字,是的。

“我已经尝试过在变量周围加引号和不加引号”

这并不是导致您的代码一直失败的原因,而是保留字。

如果这仍然不能让您更新数据库,您可能还有其他未知的问题。

使用错误报告:

并使用您正在使用的 MySQL API 的错误处理程序(再次)检查查询中的错误,这也是未知的。

您的代码也对 SQL 注入开放,请使用准备好的语句:


仅供参考:

所以你选择的命名约定失败了。

【讨论】:

    猜你喜欢
    • 2015-07-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-13
    • 2013-12-20
    • 1970-01-01
    • 1970-01-01
    • 2017-01-05
    相关资源
    最近更新 更多