我已经放弃尝试修复在 SQL Server 上运行的 php 程序(当然是针对 MySQL 的)。
[Microsoft][ODBC Driver 11 for SQL Server][SQL Server]Incorrect syntax near '`'. for query UPDATE wp_posts SET post_author = yyy, post_date = N'2017-04-16 16:52:44.000', post_date_gmt = N'2017-04-16 14:52:44.000', post_content = N'\\ \', `post_content_filtered` = N'', `post_title` = N'test \\', `post_excerpt` = N'', `post_status` = N'draft', `post_type` = N'post', `comment_status` = N'closed', `ping_status` = N'open', `post_password` = N'', WHERE ID = xxx made by edit_post, wp_update_post, wp_insert_post, pdo_wpdb->query, pdo_wpdb->_post_query, pdo_wpdb->print_error
是否可以仅在特定数据库上创建过滤器,并删除所有反引号/严重符号以清理所有传入查询?
不,不可能拦截和更改查询。
如果有人在我面前悬着数百万美元来实现它,我可以想象构建一个与线路兼容的应用程序,它的行为就好像它正在接受查询,然后重写它们并将它们传递给另一层。然而,这不是一个小练习,它留给了读者。这就是 GreenSQL(现在是Hexatier)正在做的事情,位于应用程序和 SQL Server 之间,进行缓存和审计。
可以使用智能数据库代理拦截和更改查询。
我不确定 GreenSQL 发生了什么(它们似乎已经从地球表面消失了),但 Gallium Data 可以为 MySQL、Postgres 和 SQL Server 做到这一点。