Mysql Wordpress$wpdb准备外部sql数据库

Mysql Wordpress$wpdb准备外部sql数据库,mysql,sql,sql-injection,wordpress,Mysql,Sql,Sql Injection,Wordpress,我试图确保我的Wordpress代码不受SQL注入的影响,并尝试使用$wpdb->prepare()来确保这一点。然而,它似乎不能正常工作 我正在练习的代码从同一服务器上的另一个SQL数据库中提取数据(即不是从wordpesss数据库)。我使用的代码是: $mydb = new $wpdb('databese_username','password','datbasename', 'host'); $id = 2; $users = $mydb->get_results( $mydb-&g

我试图确保我的Wordpress代码不受SQL注入的影响,并尝试使用$wpdb->prepare()来确保这一点。然而,它似乎不能正常工作

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

$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()或其他什么


谢谢

您必须已经连接到wordpress数据库。因此,您不需要连接到数据库。。您可以使用全局$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);

准备好的语句仍然允许您发送无效数据,它只是不会将这些数据视为可能的sql命令。谢谢pala,但这到底意味着什么?我不必担心我的代码返回数据,不管我发送的是整数还是字符串?那么它将是一个字符串,而不是
table.column=5
,它将是
table.column='some string'
,并且无论他们为字符串输入什么值,它仍然可以