2016-03-23 11 views
-2

私はこれを理解できません。私はそれをgoogledと答えの多くは、解決策としてblindValueを参照してください私も運がないとそれを試してみました。PHP bindParamが動作しません - blindValueは解決策ではありません

問題は、SELECTステートメントがゼロレコードを返していますが、レコードが1つ返されることです。値をSQLステートメントにハードコードすると機能しますが、パラメーターとして渡すことはできません。これで私を助けてくれる人もいますか?ありがとう。

<?php 
function checklogin($email, $password){ 
    try 
    { 
     // Connection 
     $conn; 
     include_once('connect.php'); 
     // Build Query 
     $sql = 'SELECT pkUserID, Email, Password, fkUserGroupID FROM tbluser WHERE Email = :email AND Password = :password'; 
     // $sql = 'SELECT pkUserID, Email, Password, fkUserGroupID FROM tbluser WHERE Email = "a" AND Password = "a"'; 
     // Prepare the SQL statement. 
     $stmt = $conn->prepare($sql); 
     // Add the value to the SQL statement 
     $stmt->bindParam(':email', $email, PDO::PARAM_STR); 
     $stmt->bindParam(':password', $password, PDO::PARAM_STR); 
     // Execute SQL 
     $stmt->execute(); 
     // Get the data in the result object 
     $result = $stmt->fetchAll(); // $result is NULL always... 

     // echo $stmt->rowCount(); // rowCount is always ZERO.... 

     // Check that we have some data 
     if ($result != null) 
     { 
      // Start session 
      if (session_status() == PHP_SESSION_NONE) { 
       session_start(); 
      } 
      // Search the results 
      foreach($result as $row){ 
       // Set global environment variables with the key fields required 
       $_SESSION['UserID'] = $row['pkUserID']; 
       $_SESSION['Email'] = $row['Email']; 
      } 
      echo 'yippee'; 
      // Return empty string 
      return ''; 
     } 
     else { 
      // Failed login 
      return 'Login unsuccessful!'; 
     } 
     $conn = null; 
    } 
    catch (PDOexception $e) 
    { 
     return 'Login failed: ' . $e->getMessage(); 
    } 
} 
?> 

接続コードはです。

<?php 
$servername = 'localhost'; 
$username = 'admin'; 
$password = 'password'; 

try { 
    // Change this line to connect to different database 
    // Also enable the extension in the php.ini for new database engine. 
    $conn = new PDO('mysql:host=localhost;dbname=database', $username, $password); 
    // set the PDO error mode to exception 
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
    // echo 'Connected successfully'; 
} 
catch(PDOException $e) 
{ 
    echo 'Connection failed: ' . $e->getMessage(); 
} 

?> 

私はmySQLに接続しています。助けてくれてありがとう ジム

+0

** WARNING **:自分のアクセス制御層を書くことは容易ではない、それはひどく間違って取得するための多くの機会があります。 [Laravel](http://laravel.com/)のような最新の[開発フレームワーク](http://codegeekz.com/best-php-frameworks-for-developers/)がある場合は、独自の認証システムを作成しないでください。強力な[認証システム](https://laravel.com/docs/5.2/authentication)が組み込まれています。絶対に[推奨されるセキュリティのベストプラクティス](http://www.phptherightway.com/#security)に従ってください。決してパスワードをプレーンテキストとして保存しないでください。 – tadman

+0

@tadmanアドバイスをいただきありがとうございます。このコードは非常に早い段階にあります。私を狂わせてしまうbindParam機能に問題があります。 –

+1

私は理解しています。だからこそ、私はさらに細心の注意を払っています。これらのことを忘れて、あなた自身のために悪夢のシナリオを作成するのは簡単です。そのため、あなたのスタイルやニーズに合ったフレームワークで歯を切断することを強くお勧めします。これは解決された問題であり、技術的な詳細ではなく実際のアプリケーションを作ることに集中できます。 – tadman

答えて

0

シンプルだがばかげたエラーだった。

私はcheckloginに渡していた$ passwordを上書きしていたconnect.phpファイルに$ passwordという変数もありました。

ジム

関連する問題