2017-05-06 9 views
0

このエラーが発生しました PDOStatement :: execute():SQLSTATE [HY093]:無効なパラメータ番号:バインドされた変数の数が/ storage/h14/202/1552202/public_html/signup.php on line 38. これは何が問題なのですか?私はそれを見ることができません。Mysqlエラー093

<?php 
if (isset($_POST['signup'])){ 
    $username = $_POST['Username']; 
    $password = $_POST['Password']; 
    try { 
     $db = new PDO('mysql:host=localhost;dbname=Accounts', 'id1552202_thecouch', 'Fargo123'); 

     $query = $db->prepare(" INSERT INTO Accounts(Usernames, Passwords) VALUES (:username ,". sha1(":password") .")"); 

     $query->bindParam("username", $username); 

     $query->bindParam("password", $password); 

     if($query->execute()){ 

      echo "<center>Account made</center>"; 

     } else { 
      echo "Error"; 
     } 
    } catch(PDOException $e){ 
     die("Error!: " . $e->getMessage()); 
    } 
} 
?> 
+0

SHA1が '含まれていません –

+0

SQL文を確保されていません。 SQLテキストをエコーアウトすると、何が起こっているかがわかります。 'sha1'関数呼び出しは文字列引数..を消費しています。関数からの戻り値はSQLテキストに含まれています。 https://ericlippert.com/2014/03/05/how-to-debug-small-programs/ – spencer7593

答えて

0

このようなsha1()は使用できません。

まず、sha1は使用しないでください。 sha2/sha256を使用してください。実際にはhmacも使うべきです。 PHPにはかなり良いパスワードハッシング機能があります。それに見る!しかしそれはあなたの質問ではありません...

第2に、クエリを作成するときに、文字列リテラル ":password"のsha1()を計算しているため、もはやあなたのプレースホルダではありませんクエリ。パスワードのsha1()をクエリ文字列の外に置き、その結果を引数として渡す必要があります。このよう

:password`プレースホルダ:

<?php 
if (isset($_POST['signup'])){ 
    $username = $_POST['Username']; 
    $password = sha1($_POST['Password']); 
    try { 
    $db = new PDO('mysql:host=localhost;dbname=Accounts', 'id1552202_thecouch', 'Fargo123'); 

    $query = $db->prepare(" INSERT INTO Accounts(Usernames, Passwords) VALUES (:username , :password)"); 

    $query->bindParam("username", $username); 

    $query->bindParam("password", $password); 

    if($query->execute()){ 

     echo "<center>Account made</center>"; 

    } else { 
     echo "Er is een fout opgetreden"; 
    } 
    } catch(PDOException $e){ 
    die("Error!: " . $e->getMessage()); 
    } 
} 
?>