首页 文章

一起使用fetch_column和fetch(PDO :: FETCH_ASSOC)?

提问于
浏览
1

我会承认php对我来说是一种新语言 .

现在我可以让每个人单独工作 . 在我的准备查询SELECT * FROM ...将允许我的PDO fetch assoc while循环工作,但然后获取列不起作用 . 然后我使用SELECT COUNT(*)我的fetch列工作,但然后我的fetch assoc没有 .

那么这周围是否存在,所以两者都有效?因为我需要fetch列来返回有多少行作为整数值(1或0)来确定用户是否输入了登录信息 . 但是我需要在那里获取列,以返回在我的数据库中的表的用户名部分输入的字符串值 . 这样我就可以使用此信息根据用户的输入进行检查,以验证用户和密码 .

谢谢,这是我的代码 . 如果你需要它更清楚地解释我会去 .

<?php
$config['db'] = array(
    'host'      => 'localhost',
    'username'  => 'root',
    'password'  => '',
    'dbname'    => 'inb271assignment'
);

$pdo = new PDO('mysql:host=' . $config['db']['host'] . '; dbname=' . $config['db']['dbname'], $config['db']['username'], $config['db']['password']);

$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
try
{
    $pdo->beginTransaction();

    $username = $_POST['Username'];
    $password = $_POST['Password'];

                        //Nicholas will be $dbUsername when fetch is working correctly.
    $databaseusername = Nicholas;

    if ($username&&$password)
    {
        $result = $pdo->prepare("SELECT COUNT(*) FROM members WHERE Username=?");
        $result->execute(array($databaseusername));

        $row = $result->fetchColumn();

        if ($row!=0) {

            while ($rows = $result->fetch(PDO::FETCH_ASSOC)) {

                $dbUsername = $rows['Username']; 


            }
            echo $dbUsername;

        }
        else
            die("That user doesn't exist");

    }

   $pdo->commit();
}
catch(PDOException $pe)
{
    echo($pe->getMessage());
}
?>

所以目前我有SELECT COUNT(*) . 因此,如果我在页面上输入我的表单中的用户名和密码,它将返回为!= 0,允许while循环工作 . 如果我有SELECT *,while循环通常会起作用 . 但是因为我没有,因为我需要计数它没有 . 所以我无法从数据库中检索出我需要的信息 .

4 回答

  • 0

    正常使用 SELECT * FROM ... 和PDO fetch assoc并使用 $result->rowCount(); 返回所有受影响的行,这与 SELECT COUNT(*) 相同

  • 3

    如果您只查询 count(*) 以查明数据库中是否存在具有给定用户名的用户,那么您没有空,那么没有用户,否则至少有一个用户 . 所以你隐含了你的信息 .

    $rowNum = 0;
    foreach ($result->fetchAll(PDO::FETCH_ASSOC) as $row) {
      $rowNum = $rowNum + 1;
       $dbUsername = $row['Username']; // btw after the loop you have only the name of the last row
    }
    if ($row>0) {
        echo $dbUsername;
    }
    
  • 0

    首先,您需要了解您正在使用的每个运算符的含义 .
    然后只在需要时才使用它,而不是添加任何操作符,因为你已经看到它们在某处使用过 .

    事实上,你既不需要 COUNT(*) 也不需要 rowCount() ,也不需要 while . 应该只返回一行 . 这就够了 .

    交易和try..catch也很重要 .

    你真正需要的只是几行代码:

    if (isset($_POST['Username']))
    {
        $sql = "SELECT * FROM members WHERE Username=? AND Password=?";
        $result = $pdo->prepare($sql);
        $result->execute(array($_POST['Username'],$_POST['Password']));
        return $result->fetch();
        // or do whatever you want with returned data
    }
    

    就这样

  • 0

    登录的例子有一个很大的缺陷,它从$ _POST中选择密码并直接查询到mysql .

    这意味着密码在数据库中是明确的 .

    要应用最佳实践,您应该对密码进行哈希处理并加密所有个人数据 .

    如何做的很好的概述:

    http://www.sitepoint.com/hashing-passwords-php-5-5-password-hashing-api/

相关问题