php - 我如何逃避`
问题描述
我有一个 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 非常感谢。
解决方案
而不是直接与数据库交互并从终端执行 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
这些语句允许您根据使用的数据库中使用的编码正确地转义查询。如果数据库上的字符集发生更改,其他转义方法可能无效。
推荐阅读
- symfony - Symfony 编译错误无法打开所需的代理
- asp.net-core - ASP.NET CORE MVC 项目中未显示字体真棒图标
- sql - SQL查询有条件地使用不同的表
- javascript - 创建一个 monorepo 而不托管在包注册表上并通过 bitbucket 安装
- java - tagForChildDirectedTreatment(boolean) 已弃用
- python - 批处理到 python 打开 chrome
- python-3.x - matplotlib 错误:AttributeError:“int”对象没有属性“toordinal”
- python - 我不知道如何让这个脚本将受感染文件列表打印到输出文件
- r - Rmarkdown 文件的参数化
- angular - Angular 无法从 Spring Boot 接收 JWT 令牌