首页 > 解决方案 > 我如何逃避`

问题描述

我有一个 php 行

    $cmd='mysql -h localhost db -e"create table if not exists 
    levermanneasypivotlocal (RecNum bigint(20) NOT NULL AUTO_INCREMENT, 
    tradedate date, `0001.HK` int(9), `0012.HK` int(9) default NULL, PRIMARY 
    KEY(`recnum`) )  AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;"';
    exec($cmd);

如何转义列名?在 shell 和 PHP 脚本中,` 具有特殊的含义。我需要这个来解决这个问题:NO ALTER or Create of remote db in a federated engine 非常感谢。

标签: phpescaping

解决方案


而不是直接与数据库交互并从终端执行 MySQL 命令,您可能应该使用数据库连接器,例如 PDO 或 MySQLi

如果使用 MySQLi,您将使用 MySQLi_real_escape_string https://www.php.net/manual/en/mysqli.real-escape-string.php转义用户输入

或使用 PDO,您将使用 PDO.Prepare https://www.php.net/manual/en/pdo.prepare.php

这些语句允许您根据使用的数据库中使用的编码正确地转义查询。如果数据库上的字符集发生更改,其他转义方法可能无效。


推荐阅读