Как вернуть количество найденных строк из запроса SELECT
-
-
Как называется таблица и префикс таблицы?What is the name of the table and the table prefix?
- 0
- 2014-01-29
- Chittaranjan
-
@Chittaranjan Имя таблицы - wp_postviews_ips,хотя я не уверен,что вы имеете в виду под префиксом таблицы.@Chittaranjan Table name is wp_postviews_ips, I'm not sure what you mean by table prefix though.
- 0
- 2014-01-29
- Swen
-
Удаление "$ wpdb->" из $ wpdb-> wp_postviews_ips,похоже,помогло!Removing "$wpdb->" from $wpdb->wp_postviews_ips seemed to do the trick!
- 0
- 2014-01-29
- Swen
-
Вот почему я попросил указать имя таблицы и префикс.Все таблицы wordpress имеют префикс,который вы устанавливаете при настройке сайта wordpress.Вот более подробная информация о [codex] (http://codex.wordpress.org/Creating_Tables_with_Plugins#Database_Table_Prefix) Пожалуйста,проверьте мой обновленный ответ с правильным использованием имени таблицы.That's the reason I had asked for the table name and prefix. All wordpress tables have a prefix which you set during setting up the wordpress site. Here are more details on [codex](http://codex.wordpress.org/Creating_Tables_with_Plugins#Database_Table_Prefix) Please check my updated answer with correct use of table name.
- 0
- 2014-01-29
- Chittaranjan
-
2 ответ
- голосов
-
- 2014-01-29
Если вы просто пытаетесь получить счетчик,
$wpdb->get_var();
вместе с использованиемCOUNT()
в вашем sql будет лучше:### Search for IP in database function postviews_get_ip($id, $ip) { global $post, $wpdb; $rowcount = $wpdb->get_var("SELECT COUNT(*) FROM $wpdb->wp_postviews_ips WHERE postid = $id AND ip = '$ip'"); return $rowcount; } postviews_get_ip($id, $_SERVER['REMOTE_ADDR']); //both $id and $_SERVER['REMOTE_ADDR']) return the values I'm searching for in the database
Что касается того,что пошло не так в вашем предыдущем примере,вы не назначали свой экземпляр
$wpdb->get_results()
переменной,а без него$wpdb->num_rows;
просто вернет ноль,поскольку фактически извлекается не из экземпляра запроса,а из глобального объекта $ wbdb.Если вы действительно хотите использовать
get_results()
:### Search for IP in database function postviews_get_ip($id, $ip) { global $post, $wpdb; $ipquery= $wpdb->get_results("SELECT * FROM $wpdb->wp_postviews_ips WHERE postid = $id AND ip = '$ip'"); $rowcount = $ipquery->num_rows; return $rowcount; } postviews_get_ip($id, $_SERVER['REMOTE_ADDR']); //both $id and $_SERVER['REMOTE_ADDR']) return the values I'm searching for in the database
Но я бы не видел необходимости в этом,если бы вам не понадобились результаты. В этом случае я бы просто вернул объект
$ipquery
и использовал быnum_rows
,когда Мне это было нужно:### Search for IP in database function postviews_get_ip($id, $ip) { global $post, $wpdb; $ipquery = $wpdb->get_results("SELECT * FROM $wpdb->wp_postviews_ips WHERE postid = $id AND ip = '$ip'"); return $ipquery; } $someVariable = postviews_get_ip($id, $_SERVER['REMOTE_ADDR']); //both $id and $_SERVER['REMOTE_ADDR']) return the values I'm searching for in the database echo $someVariable->num_rows;
If you are merely trying to get a count,
$wpdb->get_var();
along with usingCOUNT()
in your sql will be better:### Search for IP in database function postviews_get_ip($id, $ip) { global $post, $wpdb; $rowcount = $wpdb->get_var("SELECT COUNT(*) FROM $wpdb->wp_postviews_ips WHERE postid = $id AND ip = '$ip'"); return $rowcount; } postviews_get_ip($id, $_SERVER['REMOTE_ADDR']); //both $id and $_SERVER['REMOTE_ADDR']) return the values I'm searching for in the database
As to what went wrong in your previous example, you weren't assigning your
$wpdb->get_results()
instance to a variable, and without it$wpdb->num_rows;
is just going to return zero as it isn't actually pulling from the instance of the query, but rather the global $wbdb object.If you do want to use
get_results()
:### Search for IP in database function postviews_get_ip($id, $ip) { global $post, $wpdb; $ipquery= $wpdb->get_results("SELECT * FROM $wpdb->wp_postviews_ips WHERE postid = $id AND ip = '$ip'"); $rowcount = $ipquery->num_rows; return $rowcount; } postviews_get_ip($id, $_SERVER['REMOTE_ADDR']); //both $id and $_SERVER['REMOTE_ADDR']) return the values I'm searching for in the database
But I wouldn't see the need for that unless you needed the results, in which case I would just return the
$ipquery
object and usenum_rows
on it when I needed it:### Search for IP in database function postviews_get_ip($id, $ip) { global $post, $wpdb; $ipquery = $wpdb->get_results("SELECT * FROM $wpdb->wp_postviews_ips WHERE postid = $id AND ip = '$ip'"); return $ipquery; } $someVariable = postviews_get_ip($id, $_SERVER['REMOTE_ADDR']); //both $id and $_SERVER['REMOTE_ADDR']) return the values I'm searching for in the database echo $someVariable->num_rows;
-
Небольшое дополнение.Вы всегда должны использоватьprepare (https://developer.wordpress.org/reference/classes/wpdb/prepare/) при выполнении любых запросов,чтобы предотвратить внедрение sql.Small addition. You should always use prepare (https://developer.wordpress.org/reference/classes/wpdb/prepare/) when executing any queries to prevent sql injection.
- 1
- 2019-05-29
- Maciej Paprocki
-
На самом деле это не должно быть маленьким дополнением,это очень важно,чтобы не допустить использования вашего кода с помощью sql-инъекции.Actually that shouldnt be a small addition, that's very important not to make your code exploitable via sql injection.
- 0
- 2019-09-12
- Max Carroll
-
- 2014-01-29
Похоже,запрос неверный.
$ip
- это строка,поэтому вы должны заключить ее в одинарные кавычки,как показано ниже$wpdb->get_results("SELECT * FROM {$wpdb->prefix}postviews_ips WHERE postid = $id AND ip = '$ip'");
Seems the query is wrong.
$ip
is string so you should put single quote around that as below$wpdb->get_results("SELECT * FROM {$wpdb->prefix}postviews_ips WHERE postid = $id AND ip = '$ip'");
-
Пробовал,и он по-прежнему возвращает 0.Tried this and it still returns 0.
- 0
- 2014-01-29
- Swen
Я написал функцию,которая должна возвращать количество строк,найденных в запросе SELECT,но всегда кажется,что она возвращает либо 0,либо массив. Я возился с этим около часа и до сих пор не могу понять! Я уверен,что делаю что-то глупо неправильно.
Таблица MySQL
PHP