2015-10-03 5 views
0

У меня есть два вопроса относительно кодов ниже.Подсчитайте несколько строк в подготовленных отчетах PDO

  1. Я знаю, что второй код является правильным, но не уверен, что вначале также правильные оба делают то же самое, что и первое, просто написать.
  2. Я хочу подсчитать количество строк в базе данных для выбранного элемента if ($query->num_rows == 1) { не работает так как rowcount для кода ниже.

Первый код:

$query = $db->prepare("SELECT * from users WHERE username = :username"); 
$query->execute(array(':username'=>$un)); 

Второе:

$result = "SELECT * from users WHERE username = :username"; 
$query = $db->prepare($result); 
$stmt->bindValue(':username'=>$un); 
$query->execute($stmt); 
+4

Используйте 'SELECT COUNT (*)', если вы просто хотите, чтобы подсчитать количество строк. –

ответ

1

Во-первых, если вы хотите, чтобы убедиться, что выбран только один имя пользователя, вы можете использовать LIMIT в вашем заявлении MySQL

SELECT * from users WHERE username = :username ORDER BY id DESC LIMIT 1 

Или:

SELECT DISTINCT(username) from users WHERE username = :username``` 

Еще лучше, если при создании в таблице вы можете потребовать, чтобы имя пользователя было уникальным:

CREATE TABLE users (
    id INT NOT NULL AUTO_INCREMENT, 
    username VARCHAR(255) NOT NULL, 
    ... 
    PRIMARY KEY (id), 
); 

Во-вторых, проверить, что строка фактически извлекается из dabase, вы можете использовать fetch:

$query = $db->prepare("SELECT * from users WHERE username = :username"); 
$query->execute(array(':username'=>$un)); 
$rows = $query->fetch(PDO::FETCH_NUM); 
if($rows[0]) { 
    // Row exists 
} 
2

Вам не нужно количество строк. Вам нужна только сама строка. Итак, только fetch это, из первого варианта, что хорошо.

Что касается количества строк, вы должны иметь возможность получить правильное имя функции из руководства.

$query = $db->prepare("SELECT 1 from users WHERE username = ?"); 
$query->execute(array($un)); 
if ($query->fetch()) 
{ 
    // found 
} 
Смежные вопросы