2012-07-06 34 views
1

我不确定我是否正确地做了它,但是我刚开始使用PDO工作,并且无法让我的代码正常工作。我继续得到错误“抱歉无法连接”,我无法弄清楚什么是错的。使用PDO扩展名不起作用的登录脚本

包含下面是我使用的代码:

function doRun($data) 
    { 
     try 
     { 
      $db = new PDO('mysql:host=localhost;dbname=testData', 'root', 'root'); 
      $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 

       $stmt = $db->prepare(' SELECT 
               username, pass 
             FROM  
               testTable 
             WHERE 
               username = :name 
             AND  
               pass = :pass 

            '); 

       $stmt->bindParam(':name', $username, PDO::PARAM_STR); 
       $stmt->bindParam(':pass', $pass, PDO::PARAM_STR); 

       $stmt->execute(); 

       //$result = $stmt->fetchAll(PDO::FETCH_ASSOC); 
       $result = $stmt->fetchColumn(); 

       if($result == false) 
       { 
        echo 'sorry could not connect'; 
       } 
       else 
       { 
        $_SESSION['username'] = $user; 

        echo 'logged in as' . $user; 
       } 

     } 
     catch (PDOException $e) 
     { 
      echo "throw"; 
     } 

     $db = NULL; 
    } 
+0

什么是响应你得到?你的错误日志中有什么? – cr125rider 2012-07-06 22:09:27

+0

我不会在我的php_error日志中获取任何内容,并且显示错误ini_set('display_errors',1); \t error_reporting(E_ALL | E_STRICT);我只能抱歉无法连接 – Reshad 2012-07-06 22:13:31

+0

有可能您的查询没有返回任何内容。检查你的表 – Ibu 2012-07-06 22:15:20

回答

1

这会给你0行,因为它似乎是$username$pass没有定义:

$stmt->bindParam(':name', $username, PDO::PARAM_STR); 
    $stmt->bindParam(':pass', $pass, PDO::PARAM_STR); 
          ^^^^^^^^^ 

你可能需要一些元素从$data变量您喂养的功能作为用户名和密码。

稍后,您正在使用未定义的变量$user

$data包含什么?

+0

谢谢!我做了这样的诡计: $ username = $ _POST ['name']; $ pass = $ _POST ['pass'];在尝试之上,但这是正确的方式? – Reshad 2012-07-06 22:21:41

+0

@ user1453253并不是真的,你通常会对你的'POST'变量做一些处理(不是绝对必要的),你绝对不应该存储一个纯文本密码,你需要使用一个salted hash(你可以在这里找到更多的信息所以对此)。 – jeroen 2012-07-06 22:26:11

+0

嗯,我知道我必须使用散列密码。但这仅用于测试PDO的工作方式。为处理我使用一个FORM类与验证在它已经所以我不认为我必须做两次:) – Reshad 2012-07-06 22:30:28

1

即使您连接但无法找到匹配,您仍“无法连接”的原因是因为您的用户变量未定义。

尝试以下解决方案:

<?php 

function doRun($data) 
{ 
    $msg = ''; 
    $username = isset($_POST['name']); 
    $pass = isset($_POST['pass']); 

    try 
    { 
     $db = new PDO('mysql:host=localhost;dbname=testData', 'root', 'root'); 
     $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 

     $stmt = $db->prepare(' 
      select 
       username 
       ,pass 
      from 
       testTable 
      where 
       username = :name 
       and pass = :pass 
     '); 
     $stmt->execute(array(':name' => $username, ':pass' => $pass); 
     $result = $stmt->fetchAll(); 

     if(!empty($result)){ 
      $_SESSION['username'] = $user; 
      $msg = "logged in as $user";   
     }else{ 
      $msg = "Unable to connect"; 
     } 

    } catch (PDOException $e) { 
     echo "Error: $e"; 
    } 

    echo $msg 

    $db = NULL; 
} 
?>