我想编辑一个Wordpress插件。我的代码如下。我被卡住的部分在代码中有记录。你能告诉我写代码的正确方法吗?
谢谢。
<?php
global $wpdb; //I think this is correct
//I need help to convert the 2 lines below to a Wordpress friendly query
$query1="SELECT * FROM wp_users WHERE user_login LIKE '%z%'";
$result1 = mysql_query($query1);
//I want to put the search results into the example below
if ( $user_login == 'admin' || $user_login == 'joe' ) {
$do_something;
}
?>
最新更新谢谢大家的建议。多亏了你的建议,我想我已经把第一部分写对了。它是这样的:
<?php
global $wpdb;
$my_table = $wpdb->prefix."users";
$my_query = "Select user_login from $my_table where user_login LIKE '%z%' ";
$my_results = $wpdb->get_results($my_query);
?>
在第二部分中,如何将搜索结果放入foreach循环中?让我们假设在搜索结果中有100条记录。如何使用下面的代码循环遍历所有100条记录:<?php
foreach($my_results as $user_data)
{
if($user_data -> user_login === 'admin' || $user_data -> user_login === 'joe' //all hundred records need to go inside here. How do I do that?)
// do something
}
?>
不,不。
问题#1:不要在新的mySQL客户端代码中使用mysql_query()
。使用mysql或PDO代替。旧的API已经被弃用很长时间了。
问题#2:永远不要将文本参数直接从用户传递到SQL查询中。这使您容易受到SQL注入攻击。总是使用准备好的语句。
问题#3:你不需要使用mySQL API与Wordpress $wpdb。
您可以找到几个教程,包括:
http://www.smashingmagazine.com/2011/09/21/interacting-with-the-wordpress-database/在你的例子中:
<?php
global $wpdb;
$query1 = "SELECT user_login FROM wp_users WHERE user_login LIKE '%z%'";
$myrows = $wpdb->get_results($query1);
foreach ($myrows as $user) {
if ($user->user_login == 'admin' || $user->user_login == 'joe' ) {
...
}
}
?>
不要在查询中直接使用'wp_'前缀。取而代之的是使用$wpdb->前缀。您可以将表名存储在一个变量中,然后使用它。
在if条件中使用===而不是==。
你在查询中使用*(所有列),所以在foreach循环中,你可以使用->访问所有表列,如下所示:
<?php
global $wpdb;
$my_table = $wpdb->prefix."users";
$my_query = "Select * from $my_table where user_login LIKE '%z%' ";
$my_results = $wpdb->get_results($my_query);
foreach($my_results as $user_data)
{
if($user_data -> user_login === 'admin' || $user_data -> user_login === 'joe')
// do something
}
?>