php - Mysql错误093

标签 php mysql

我收到此错误, PDOStatement::execute(): SQLSTATE[HY093]: 参数数量无效:绑定(bind)变量的数量与第 38 行/storage/h14/202/1552202/public_html/signup.php 中的标记数量不匹配。 这有什么问题吗?我看不到。

<?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());
    }
}
?>

最佳答案

你不能那样使用 sha1()。

首先,不要使用 sha1。使用 sha2/sha256。实际上你也应该使用 hmac。 PHP 有一个非常好的密码散列工具。了解更多!但这不是你的问题...

其次,在构建查询时,您正在计算字符串文字“:password”的 sha1(),因此它不再是查询中的占位符。您需要在查询字符串之外获取密码的 sha1() 并将结果作为参数传递。

像这样:

<?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());
    }
}
?>

关于php - Mysql错误093,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43815944/

相关文章:

PHP mysql 函数总是在更新查询时返回 false

php - 使用 union 创建 zf2 查询 'not in' 子句

mysql - MariaDB:未知数据类型 "MYSQL_JSON"

php - 如何计算某列与另一个表的列匹配的行数

php - 什么样的漏洞涉及攻击者发送 "php://input"?

php - 单击 href 后代码运行两次

php - 在 while 循环上执行选择查询后,并非所有行都插入到表中 - PHP/MYSQL

mysql - 如何在不知道列长的情况下将所有位设置为 1?

php - mysql表显示小数点后两位数

php - SQL 数据库中用户名的默认值