【问题标题】:MySQL SET DEFAULT returns error: query is emptyMySQL SET DEFAULT 返回错误:查询为空
【发布时间】:2016-11-14 10:27:30
【问题描述】:

我有一个名为“users”的现有 MySQL(5.6.12 版)表,并试图通过 php(5.4.12 版)设置列默认值,例如:

$query = "ALTER TABLE users ALTER username SET DEFAULT NULL";
$result = mysqli_query($query);

但是,这会产生 SQL 错误(导致消息“查询为空”)。 'username' 是一个 VARCHAR(200) 类型的列。

使用带引号的文字(例如“John”)作为默认值会导致相同的错误。 (只是为了好玩,虽然我使用的是 MySQL,但我也尝试根据 SQL/MS Access 或 Oracle 语法修改查询,但它仍然不起作用。

我做错了什么?

编辑:问题已解决。上面的查询没问题,没有错。

我犯了一个令人难以置信的愚蠢错误,忘记了$$query 前面的符号,即我的代码是写$result = mysqli_query(query);

(请注意,我是一名拥有数十年经验的程序员。)

【问题讨论】:

  • 我猜这个命令应该是这样的:ALTER TABLE users MODIFY....
  • 它对你不起作用,因为 mysqli_query() 需要两个参数....查看手册
  • @1000111 猜得不错 - 但是 MODIFY 也不起作用。
  • @nospor 仅用于程序风格,不面向对象:见http://php.net/manual/en/mysqli.query.php
  • @1000111 并且 ALTER 是正确的:例如参见 tutorialspoint.com/mysql/mysql-alter-command.htm

标签: php mysql alter setdefault


【解决方案1】:

如下更改查询

$query = "ALTER TABLE users MODIFY Column username VARCHAR(200) NULL DEFAULT NULL";

 $query = "ALTER TABLE users CHANGE Column username username VARCHAR(255) NULL DEFAULT NULL";

【讨论】:

    【解决方案2】:

    我将这个用于我的网站

    $query = "ALTER TABLE 'users' CHANGE 'username' 'username' VARCHAR( 100 ) NULL DEFAULT NULL";
    $result = mysqli_query($query);
    

    【讨论】:

      【解决方案3】:

      问题解决了。查询其实很好,没有错。

      我犯了一个令人难以置信的愚蠢错误,忘记了$query前面的$符号,即我的代码是$result = mysqli_query(query);

      (请注意,我是一名拥有数十年经验的程序员。)

      【讨论】:

      • 不要吹嘘自己犯了一个错误并且已经意识到了
      • @JacksonSiro 我证明即使经过多年的经验,我仍然愚蠢到犯这样的错误。显然你很难理解这一点。
      • 好的,先生。程序员需要“双目”
      【解决方案4】:

      在 MySQL 中,您使用反引号 [`] 引用的文字,不要使用引号 [']。另一方面,每个 DDBB 引擎都使用其略有不同的 SQL 风格。无论如何,它们中的大多数都能够解释各种活动标准 SQL89、SQL92、SQL99 等所描述的公共子集。

      简而言之,关于 MySQL 的预期,您的 SQL 是错误的。您必须通过使用不同的 SQL 引擎在反复试验的基础上培养您的 SQL 技能,直到您可以为每个引擎提供他们期望的 SQL 变体。只是不要放弃并坚持查询。简化它,运行较短的字符串,直到找到有效的字符串,然后通过添加更小的字符串来改进它,直到达到目标。

      【讨论】:

      • 这对我没有多大帮助。
      • 请您先帮助自己。我正在尝试将您置于上下文中,以便您可以自己解决问题。分析查询中的每个字节并为您提供正确的字节就是您的功课。
      • 您在这篇文章中所说的一切我和其他大多数人都不知道。当我的问题是一个非常具体的问题时,这太笼统了。事实上,由于你做出的假设,这几乎是一种侮辱——就像你在告诉一个小孩他应该解决他的问题。提供零帮助。
      • 没有人事先知道您在这个特定主题上的知识水平。更高或更低并不会让你变得更好或更糟,所以我不明白我的回答怎么会被认为是侮辱性的。无论如何,我看到你听从了我的建议,最终帮助了自己。
      • 您的回答相当于告诉某人自己通过反复试验来解决问题。严重地?你认为这有帮助吗?这当然是侮辱。任何白痴都知道这一点,所以你实际上是在说我不是白痴。您对反引号文字所做的 cmets 首先是不相关的,其次也不一定是正确的。仅当您对表和字段名称使用特殊字符时才需要,并且使用普通引号可能会更好,因为 bacticks 不符合 ANSI-SQL 标准。
      猜你喜欢
      • 2012-03-20
      • 2011-09-02
      • 2017-10-29
      • 1970-01-01
      • 2013-11-07
      • 1970-01-01
      • 2013-11-26
      • 1970-01-01
      • 2014-02-15
      相关资源
      最近更新 更多