【问题标题】:Fatal error: Uncaught Error: Call to a member function bindParam() on string i致命错误:未捕获的错误:调用字符串 i 上的成员函数 bindParam()
【发布时间】:2017-07-09 05:39:08
【问题描述】:

我正在尝试创建一个注册页面并成功创建它,并希望仅将其验证到一个电子邮件帐户,以便用户只能通过电子邮件创建一个帐户,下次它应该会给出一个错误,说你有已经注册了电子邮件帐户,但在跟踪中我收到一条错误消息,说正在休耕

Fatal error: Uncaught Error: Call to a member function bindParam() on string 
in C:\xampp\htdocs\sign\register.php:20 Stack trace: #0 {main} thrown in 
C:\xampp\htdocs\sign\register.php on line 20

而我的php注册码是fallows

<?php
include('connection.php');  
$form = $_POST;
$username = $form['username'];
$password = $form['password'];
$repass = $form['repass'];
$email = $form['email'];
$date = $form['date'];
$month = $form['month'];
$year = $form['year'];
if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
echo "Invalid email please type a valid one"; 
}
else{
if($username !='' && $password !='' && $repass!='' && $email !='' && 
$date!='' && $month !='' && $year !='')
{
if($password == $repass)
{
$query = "SELECT * FROM users where email = :email AND username = 
:username";
$query->bindParam(':username',$username);
$query->bindParam(':email',$email);
$count1 = $query->rowCount();
if($count> 0)
{
    echo "soryy the email you are trying to register is already 
registered!";
}
else{

$insert = $connection->prepare("INSERT INTO users 
(username,password,email,date,month,year)  values (:username, :password, 
:email, :date, :month, :year)");
$insert->bindParam(':username',$username);
$insert->bindParam(':password',$password);
$insert->bindParam(':email',$email);
$insert->bindParam(':date',$date);
$insert->bindParam(':month',$month);
$insert->bindParam(':year',$year);
$out = $insert->execute();
if(isset($out)){
    echo "thankyou you have sucessfully registered";
}
else{
    echo " sorry some error occured please try again!";
}
} 
}
else{
echo " passwords do not match";
die();
}
}
else{
echo " you have not filled the registration form completely so please it";
}
}
?>

谁能帮我解决这个问题谢谢

【问题讨论】:

  • $select = $connection-&gt;prepare($query) 然后$select-&gt;bindParam(':username',$username)

标签: php mysql pdo


【解决方案1】:

你没有声明一个语句并直接绑定参数来查询使用这样的东西。

$select = $connection->prepare($query); 
$select->bindParam(':username',$username);

【讨论】:

    【解决方案2】:

    您必须在准备好的语句上绑定参数。将选择查询语句更改为

    $query = $connection->prepare("SELECT * FROM users where email = :email AND username = 
    :username");
    

    编辑

    要从选择查询中计算行数,请使用fetchColumn。此外,您正在为$count1 赋值并使用$count。所以使用相同的变量名

    $count = $query->fetchColumn();
    if($count> 0)
    {
        echo "soryy the email you are trying to register is already 
    registered!";
    }
    

    【讨论】:

    • 感谢您的回答,但它有问题它甚至多次使用相同的电子邮件注册该人,但根据我编写的代码它不应该这样做,它必须只创建一个具有特定电子邮件的帐户,您可以查看它吗
    • 以及 if() 语句中的计数更改为 count1 但我找不到错误在哪里
    • $query-&gt;rowCount();改成$query-&gt;fetchColumn()然后试试
    • 即使现在它也无法正常工作,但我不明白我之前创建了 l 使用 rowCount() 然后它开始工作但现在它不是并且也使用了 fetchColumn() 但没有工作它有什么区别正在成功注册到数据库中
    猜你喜欢
    • 2016-10-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-14
    • 2012-09-29
    • 2018-09-10
    • 2022-01-20
    • 1970-01-01
    相关资源
    最近更新 更多