2016-11-24 2 views
0

Мне нужно подсчитать из колонки в моей базе данных на основе строки, равным имя пользователя вошедшего внужно считать строку в колонке на основе зарегистрированного пользователя

$this->setParams('username', $users->getInfo($_SESSION['user']['id'], 'username')); 

мне это нужно, чтобы посчитать, сколько много раз имя пользователя повторяется в этой таблице.

<?php echo number_format(mysql_num_rows(mysql_query("SELECT from login_logs WHERE username = '".$_SESSION['user']['id'] ."username"))); ?> 

Он подходит как 0, хотя я вижу 4 значения в базе данных.

Как я могу получить правильный счет?

+0

Как выглядят данные? также, почему вы добавляете 'username' после фактического имени пользователя? вы сохраняете все имена пользователей, суффиксы с 'username'? Кроме того, вам нужно объявить, что вы хотите выбрать. вы должны посмотреть на свои журналы ошибок. – khuderm

+0

Если я использую {имя_пользователя}, он указывает текущее имя пользователя, зарегистрированного в системе. Я пытаюсь подсчитать из таблицы, сколько времени имя пользователя есть от login_logs, чтобы подсчитать, сколько недопустимых логинов было. – Jashun

+0

'WHERE username = '". $ _ SESSION [' user '] [' id ']. «Username» «Я имею в виду эту часть. Почему вы добавляете« имя пользователя »в конце' $ _SESSION [' user ' ] ['id'] '? Если бы у меня было имя пользователя на вашем сайте, вы сохранили бы его как' khudermusername', а не просто 'khuderm'? – khuderm

ответ

0

Во-первых, как и все, кто видит mysql_query говорит, использовать PDO. Однако для целей обучения mysql_query просто отлично, но совершенно неприемлем на производственном сервере. Главным образом потому, что mysql_query очень небезопасен. Это склонно к тому, что вы делаете как инъекции sql, которые могут действительно испортить сервер или даже дать доступ к хакерам. Как только вам станет удобно пользоваться PHP и MySQL, прочитайте над sql-инъекцией и обеспечьте свой код.

Возвращаясь к реальному вопросу, вы ничего не видите, потому что ваш запрос выбора полностью избит. Давайте сломаем его. Я только отступывал ваш запрос, чтобы мы могли подробно поговорить об этом.

SELECT 
from login_logs 
WHERE username = '".$_SESSION['user']['id'] ."username" 

Есть пара вопросов с этим запросом.

  1. Вы не определяете, что хотите выбрать. SELECT * вернет каждую колонку. Однако, если вы просто считаете и не заботитесь о получении данных, вы можете использовать индексированный столбец, как поле id SELECT id. Это повышает производительность. Возможно, то, что вы хотите прочитать позже.
  2. Ваше местонахождение в значительной степени бесполезно, добавив "username". Предположим, что я зарегистрированный пользователь. Мое имя пользователя: khuderm, поэтому $_SESSION['user']['id'] вернет khuderm. Поэтому, если вы замените переменную моим именем пользователя, она станет WHERE username = 'khudermusername, когда она должна просто искать khuderm. Поэтому удаление будет частично устранять проблему. Кроме того, у вас отсутствует заключительная цитата, окружающая значение имени пользователя. Таким образом, вместо того, прилагая буквальное слово "username" к фактическому вошли в систему имя пользователя пользователя, вы должны быть добавлением "'", чтобы закрыть эту цитату в начале WHERE username = '"

Если вы можете выполнить эти действия, вы должны быть в состоянии исправить ваш проблема. Легкий способ отладки MySQL-запросов в PHP - это повторить его, чтобы получить окончательный запрос с переменными и заполнить его. Поэтому в любом месте вашего кода эхо-сообщение "SELECT from login_logs WHERE username = '".$_SESSION['user']['id'] ."username" покажет вам именно то, что отправлено в db для запросов. После этого запустите результат эха в phpmyadmin или workbench или что вы используете, чтобы посмотреть на db, и он должен сообщить вам, что не так с запросом.

Не забудьте ознакомиться с SQL-инъекциями, PDO и подготовленными операторами.Надеюсь, это было проницательное и счастливое кодирование!

+0

Я могу использовать верстак, чтобы проверить это? Есть ли учебник о том, как? – Jashun

+0

скопируйте полученный запрос из эха и запустите его в workbench – khuderm

+0

Последнее, что я придумал из того, что ты мне сказал. Я думаю, что это может быть синтаксический номер, потому что я пытаюсь подсчитать. – Jashun

0

Вы ищете SELECT COUNT(username) FROM logins_logs WHERE username = "your username"

Но вы должны использовать PDO и подготовить запрос вместо mysql_query.

Пример:

$options = array(
    PDO::ATTR_ERRMODE    => PDO::ERRMODE_EXCEPTION, 
    PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, 
    PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES \'UTF8\'', 
); 
$dsn= 'mysql:host=your_host;dbname=your_db'; 
$pdo = new PDO($dsn, 'root', 'root_password', $options); 

$stmt = $pdo->prepare('SELECT COUNT(username) FROM logins_logs WHERE username = :username'); 
$stmt->bindParam(':username', $users->getInfo($_SESSION['user']['id'], 'username')); 
$stmt->execute(); 
$result = $stmt->fetch(); 
echo $result['COUNT(username)']; 
+0

Итак, мне нужно создать PDO-соединение для подсчета одной строки из базы данных? – Jashun

+0

Да, во всяком случае, какое-то соединение , даже если вы не хотите использовать PDO – Max

+0

Вы также можете пойти с 'mysqli_query' – Max

Смежные вопросы