【问题标题】:Warning: PDOStatement::execute(): SQLSTATE[HY093]: Invalid parameter number: parameter was not defined in C:\wamp\www\PDO.php on line 24警告:PDOStatement::execute(): SQLSTATE[HY093]: Invalid parameter number: parameter was not defined in C:\wamp\www\PDO.php on line 24
【发布时间】:2015-07-07 18:16:05
【问题描述】:

今天,我正在尝试我的代码,但出现此错误:未定义参数... 请帮帮我:

    <?php
    $user = 'dbuser';
    $pass = 'pwd';
    $db = new PDO( 'mysql:host=localhost;
dbname=registration', $user, $pass );
    $form = $_POST;
    $firstname = $form[ 'firstname' ];
    $lastname = $form[ 'lastname' ];
    $username = $form[ 'username' ];
    $email = $form[ 'email' ];
    $password = $form[ 'password1' ];
    $dateofbirth = $form[ 'dateofbirth' ];
    $monthofbirth = $form[ 'monthofbirth' ];
    $yearofbirth = $form[ 'yearofbirth' ];
    $gender = $form[ 'gender' ]; 
    $sql = "INSERT INTO members ( firstname, lastname, username, email,
password, dateofbirth, monthofbirth, yearofbirth, gender ) 
VALUES ( :firstname, :lastname, :username, 
:email, :password1, :dateofbirth, :monthofbirth, :yearofbirth,
:gender )";
    $query = $db->prepare( $sql );
    $query->execute( array( ':firstname'=>$firstname, ':lastname'=>      $lastname, 
':username'=>$username, ':email'=>$email, ':password'=>$password, 
':dateofbirth'=>$dateofbirth, ':monthofbirth'=>$monthofbirth, 
':yearofbirth'=>$yearofbirth, ':gender'=>$gender ) );
    $result = $query->execute( array( ':firstname'=>$firstname,                                                 ':lastname'=>$lastname, 
':username'=>$username, ':email'=>$email, ':password'=>$password, 
':dateofbirth'=>$dateofbirth, ':monthofbirth'=>$monthofbirth, 
':yearofbirth'=>$yearofbirth, ':gender'=>$gender ) );
    if ( $result ){
    echo "<p>Thank you. You have been registered</p>";
    } else {
    echo "<p>Sorry, there has been a problem inserting your details.         Please contact admin.</p>";

} ?>

【问题讨论】:

    标签: php mysql forms pdo


    【解决方案1】:

    在您传递给PDO::prepare 的查询字符串中,您有这个参数:

    :email, :password1
    

    但是您传递给PDOStatement::execute 的数组没有:password1 键,而是有一个:password 键。这是一个简单的错字:修正一个或另一个。

    不过,在将实际提交的数据存储到数据库之前对其进行清理可能是个好主意。使用以下内容可以轻松验证电子邮件地址之类的内容:

    if (!filter_var($email, FILTER_VALIDATE_EMAIL))
    {
        printf(
            '%s is not a valid email address, please fill in correct values',
             $email
        );
        //rebuild form, and return response to client
    }
    else
    {
        //carry on validating data, eventually insert it in the DB
    }
    

    同样重要的是不要忘记使用isset 检查帖子参数,如果您不这样做,您的代码可以并且将会生成大量通知

    【讨论】:

      猜你喜欢
      • 2018-04-22
      • 2023-03-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-19
      • 1970-01-01
      • 1970-01-01
      • 2019-10-08
      相关资源
      最近更新 更多