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资源。