2017-12-08 10 views
-2

どうすればPDOにすることができますか?私は試みましたが、私はどのように知りません。 最初はMySQLiだったと私はPDOとそうにそれを回すことを試み、それは結果であった:mysqli変換PDO

<?php 
    $username = $_POST['username']; 
    $password = $_POST['password']; 

    $stmt = $conn-> prepare("SELECT * FROM resident WHERE '$username' = ? AND '$password' = ?"); 
    //mysqli_stmt_bind_param($sql, "ss", $username, $password); 
    $stmt->bindParam(':username', $username); 
    $stmt->bindParam(':password', $password); 
    $stmt ->execute(); 
    mysqli_stmt_store_result($sql); 
    $stmt-> BindParam($sql, $name, $username, $password); 
    $response=array(); 
    $response["succes"] = false; 
    while (mysqli_stmt_fetch($sql)) { 
     $response["success"] = true; 
     $response["name"]= $name; 
    } 
    echo json_encode ($response); 
?> 

答えて

1

あなたは、列名を持つ変数を混乱しています。その違いに注意することは非常に重要です。クエリでは'$username'の文字列で、値はSQL injection bugとなります。 username引用符がない場合はおそらく列名です。

名前付きプレースホルダも使用していますが、名前は付けられていません。 ?は無名です。 :xという名前のプレースホルダが必要な場合は、:xという名前のプレースホルダをクエリに含める必要があります。

あなたの固定コードは次のようになります。技術的には、機能が、非常に、非常に間違っていること

$stmt = $conn-> prepare("SELECT * FROM resident WHERE username=:username AND password=:password"); 
//mysqli_stmt_bind_param($sql, "ss", $username, $password); 

$stmt->bindParam(':username', $username); 
$stmt->bindParam(':password', $password); 
$stmt ->execute(); 

。パスワードは、少なくともpassword_hashを使用して、適切にハッシュされたである必要があります。あなたがこれ以上ユーザー名とパスワードに基づいて取得できない場合は、ユーザー名に基づいて取得し、password_verifyを使用して、正しいかどうかを確認する必要があります。

免責事項:これは学術目的のために厳密でない限り独自のログインシステム

を書いていない、このコードのすべてはかなりの時間の無駄です。いずれもdevelopment frameworkにはこれに対する解決策があります。 1つの例はLaravelであり、出荷時の状態でフル機能の​​が得られます。

+0

コードbuddyの別の問題はありますか?ただ明確化。 :) – Lie

+0

@Lieはい。たくさんの。 – tadman

1

あなたは、このまた、tadmanの答えを使用することができます。

$stmt = $conn-> prepare("SELECT `id` FROM resident WHERE username=:username AND password=:password"); 

$stmt->execute(array(':username' => $username, ':password' => $password); 

そして、あなたのパスワードをハッシュ。 あなたはpdoのいくつかの基礎を学ぶことができますHere, W3schools