计算PDO预处理语句中的行数

时间:2015-10-03 12:34:13

标签: php mysql pdo

我对以下代码有两个问题。

  1. 我知道第二个代码是正确的,但不确定如果第一个代码也是正确的,那么做同样的事情,第一个代码很容易写。
  2. 我想计算所选元素if ($query->num_rows == 1) {的数据库中的行数不起作用,以及如何rowcount代码如下。
  3. 第一个代码:

     $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);
    

2 个答案:

答案 0 :(得分:2)

您不需要行数。你只需要行本身。所以,只需获取它,从第一个变体,这是好的。

从行数开始,您应该能够从手册中获取正确的函数名称。

$query = $db->prepare("SELECT 1 from users WHERE username = ?");
$query->execute(array($un));
if ($query->fetch())
{
    // found
}

答案 1 :(得分:1)

首先,如果您想确保只选择一个用户名,可以在MySQL语句中使用LIMIT

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
}