【问题标题】:Rename illegal column names with PHP for mySQL使用 PHP for mySQL 重命名非法列名
【发布时间】:2011-10-30 07:18:49
【问题描述】:

我的表中有一个名为“read”的列。 当我尝试对其执行操作时,PHP 告诉我“读取”周围有一个错误。根据以前对此类错误的经验,我确定列名“read”是非法的。 问题是我不能用 PHP 重命名列。每次我尝试时,我都会收到一个错误(实际上是同样的错误)。 当我进入 PHPMyAdmin 并在那里进行更改时,它可以完美运行。

关于如何使用 PHP 更改列名的任何想法?

【问题讨论】:

    标签: php mysql renaming


    【解决方案1】:

    在表名周围使用反引号,如下所示:

    select * from `read`
    

    它告诉 MySQL 你指的是一个名字而不是一个关键字。

    【讨论】:

    • @user866339 不,这些是单引号。您需要使用反引号。作为对您对我的回答的评论的回应,我给您留下了更多信息。
    【解决方案2】:

    当您说“重命名”时,您的意思是您正在尝试修改表定义本身,例如 ALTER TABLE?如果是这样,您的 PHP 代码和 PHPMyAdmin 之间应该没有区别(因为后者本身就是 PHP 代码)。您可能遇到的唯一问题是,如果您在 PHP 代码中以与在 PHPMyAdmin 中不同的数据库用户身份登录。您需要确保用户在该表上有ALTER privileges

    如果您只是在谈论在表上运行正常查询,并且只是想阻止语法错误的发生,那么您可以将字段和/或表名包含在反引号中 - 即 ` kbd> 通常与数字栏上的波浪号 ~ 位于同一键上 - MySQL 将能够区分字段名称和保留字。

    【讨论】:

    • 我在发布问题之前尝试过,但没有成功 =(
    • @user866339 如果这不起作用,那你为什么接受我的回答?我可以向您保证,反引号可以工作,但是如果您想发布您的代码作为对您问题的编辑,我很乐意再看一下您的代码。从您对 Dani 回答的评论来看,您似乎使用了错误的报价。您需要使用反引号,而不是单引号。在 cmets 中很难使用反引号,因为 SO 使用它们来表示代码块。这个 wiki 页面可以告诉你什么是反引号:en.wikipedia.org/wiki/Grave_accent
    猜你喜欢
    • 2012-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-01
    相关资源
    最近更新 更多