【问题标题】:How to escape reserved mysql words in query in php? [duplicate]如何在php中的查询中转义保留的mysql字? [复制]
【发布时间】:2013-07-13 22:56:19
【问题描述】:

所以我想我打算将我的唱片表名称从“专辑”更改为“发行”,因为无论如何这对我来说更有意义...... 大错!查询突然停止工作......经过几个小时的研究,我意识到'release'是mySQL中的保留词,只有在使用正确的转义时才能使用。在这种情况下,转义符号是`,像这样

<?php
$sql = 'SELECT release.release_id, release.title, release.subtitle
        FROM `release`
        WHERE release.released_id = 567';
?>

我的问题是,这是否是在 PHP 中转义保留的 mysql 字的正确方法?有没有一种正常化的方式来解决这个问题? 谢谢

【问题讨论】:

  • 嗯,你真的回答了你自己的问题。 ` 是这样做的方法。将表名括起来是一种很好的做法,尽管我个人觉得它很乱,所以简单地避免使用保留字,这很好地解决了这个问题。请记住,该名称是为了您的利益,而不是 Mysql,因为它无论如何都将“发布”视为二进制字符串。也许是词库?
  • 好的,感谢您的确认..我想确定这个奇怪的角色是否是正确的方法......所以如果我想避免在任何地方使用反引号,我最好使用表上的别名,例如 SELECT rl.title FROM `release` as rl WHERE rl.release_id = 567

标签: php mysql


【解决方案1】:

到处使用反引号。

$sql = 'SELECT `release`.release_id, `release`.title, `release`.subtitle
        FROM `release`
        WHERE `release`.released_id = 567';

【讨论】:

    【解决方案2】:

    要逃避它们,只需将它们括在两个反引号之间。像这样

    $sql = 'SELECT `release`.release_id, `release`.title, `release`.subtitle
            FROM `release`
            WHERE `release`.released_id = 567';
    

    编辑:

    为了避免到处出现反引号,只需使用这样的别名:

    $sql = 'SELECT r.release_id, r.title, r.subtitle
            FROM `release` as r
            WHERE r.released_id = 567';
    

    【讨论】:

    • 所以如果我想避免在任何地方使用反引号,我最好在表格上使用别名,例如 SELECT rl.title FROM `release` as rl WHERE rl.release_id = 567
    • @Marco 看看我编辑的答案,是的,使用别名
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-02-02
    • 2016-01-19
    • 1970-01-01
    • 2011-07-19
    • 2010-11-12
    • 2011-08-06
    • 1970-01-01
    相关资源
    最近更新 更多