I take it from the database and send it via ajax (wordpress). Everything works fine, except that I don’t get the first row from the database. As I read on the Internet, a similar problem is in the array, maybe. Can someone explain and help me fix it so that all rows are displayed?
Code:
$sql = $wpdb->prepare( "SELECT * FROM users" );
$count = 0;
$user_object = array();
foreach( $wpdb->get_results( $sql ) as $key => $row ) {
$user_id = $row->user_ID;
$user_name = $row->user_name;
$user_object[$count]= array(
"user_ID"=>$user_id,
"user_name"=>$user_name,
);
$count++;
}
return wp_send_json( $user_object );
2
Answers
You don’t need to loop your results at all, your code can be simplified further.
prepare()
.get_results()
withARRAY_A
will already do this for you.Code:
See: https://developer.wordpress.org/reference/classes/wpdb/get_results/
When you want to add PHP variables to your SQL, then using a prepared statement is appropriate. For example: WordPress prepared statement with IN() condition
WordPress database tables always use prefix so you have to include prefix using
$wpdb->prefix.'users'
Or if you are trying to get WordPress core users then you can use$wpdb->users
to get the table name with prefix.Reference: https://developer.wordpress.org/reference/classes/wpdb/.
You can use
ARRAY_A
for second output parameter ofget_results()
so you don’t have to loop through results.Reference:
https://developer.wordpress.org/reference/classes/wpdb/get_results/.
Code:
Or alternative there is another way to getting users in WordPress using
get_users()
.Reference: https://developer.wordpress.org/reference/functions/get_users/