Wordpress $wpdb 在外部 sql 数据库上准备

Posted

技术标签:

【中文标题】Wordpress $wpdb 在外部 sql 数据库上准备【英文标题】:Wordpress $wpdb prepare on external sql database 【发布时间】:2015-08-11 17:38:55 【问题描述】:

我正在尝试确保我的 Wordpress 代码不受 SQL 注入的影响,并尝试使用 $wpdb->prepare() 来确保这一点。但是,它似乎无法正常运行。

我正在练习的代码从同一服务器上的不同 SQL 数据库中提取数据(即不是来自 wordpess 数据库)。我使用的代码是:

$mydb = new $wpdb('databese_username','password','datbasename', 'host');
$id = 2;
$users = $mydb->get_results( $mydb->prepare("SELECT table.column
                             FROM table.column
                             INNER JOIN table ON table.column = table.column
                             WHERE table.column = %d",$id));

这对于获取数据来说很好,但不清楚 prepare() 是否正在工作,如果以其他方式使用会停止 sql 注入。我担心的是我可以轻松地将 $id 更改为字符串(即 $id = "2"; )并且代码仍然可以获取我的数据。不应该准备阻止它工作吗?

使用外部数据库时如何正确使用prepare?是 $mydb->prepare() 还是应该是 $wpdb->prepare() 或其他?

谢谢

【问题讨论】:

prepared statements 仍然允许您发送无效数据,它只是不会将该数据视为可能的 sql 命令。 谢谢pala,但这实际上是什么意思?无论我发送的是整数还是字符串,我都不需要担心我的代码会返回数据吗? 那么它将是一个字符串,而不是table.column = 5,它将是table.column = 'some string',无论他们为字符串设置什么值,它仍然可以 【参考方案1】:

您必须已经连接到 wordpress 数据库。所以你不需要连接到数据库..你可以使用 global $wpdb;

global $wpdb; 
$id = 2;
$users = $wpdb->get_results("SELECT table.column
                             FROM table.column
                             INNER JOIN table ON table.column = table.column
                             WHERE table.column = %d",$id);

【讨论】:

以上是关于Wordpress $wpdb 在外部 sql 数据库上准备的主要内容,如果未能解决你的问题,请参考以下文章

在 wordpress 中使用 $wpdb 运行 SQL 命令

text 可以在外部WordPress目录上使用WordPress资源。

在外部 php 页面上仅获取 wordpress 页脚

Wordpress:wpdb->插入与 wpdb->prepare(wpdb->query("INSERT

在 Wordpress Sql Query 中解析结果

WordPress - SQL 查询优化