2014-04-01 61 views
0

我正在为某人的仪表板工作,并且出现错误。我正在创建一个注册页面,它的作用是查看用户是否已经在数据库中,如果它是允许他们完成注册,但是当我提交时,它会创建此错误Fatal error: Call to a member function bind_param() on a non-object on line 8Mysqli PHP致命错误:调用非对象上的成员函数bind_param()

继承人的PHP代码:

<?php 
include"core/config.php"; 

if(isset($_POST['submit'])) 
{ 
    $username = $_POST['username']; 
    $email = $_POST['email']; 

    $check = $db->prepare("SELECT * FROM users WHERE username = :username"); 
    $check->bind_param(":username",$username); 
    $check->execute(); 
    echo $check->error; 

    $emailCheck = null; 
    $usernameCheck = null; 
    while($row = $check->fetch()) 
    { 
    $emailCheck = $row['email']; 
    $usernameCheck = $row['username']; 
    } 
    if(!$email == $emailCheck) 
    { 
    echo 'Email doesn\'t exist!'; 
    }else{ 

    if(!$username == $usernameCheck) 
    { 
     echo 'Username doesn\'t exist!'; 
    } else 
    { 
     $query = $db->prepare("SELECT * FROM users WHERE username = :username AND email = :email"); 
     $query->bind_param(":username", $username); 
     $query->bind_param(":email", $email); 
     $query->execute(); 
     $_SESSION['username'] = $username; 
     echo 'You have logged in, you will be redirected.'; 
     echo '<META HTTP-EQUIV="REFRESH" CONTENT="5;URL=page to set password.">'; 
    } 
    } 
} 
?> 

表单代码:

<form class="no-margin" method="post"> 
       <fieldset> 
        <div class="form-group no-margin"> 
         <label for="username" >Username</label> 

         <div class="input-group input-group-lg"> 
           <span class="input-group-addon"> 

           </span> 
          <input id="username" type="username" name="username" class="form-control input-lg" placeholder="Username"> 
         </div> 

        </div> 

        <div class="form-group"> 
         <label for="Email" >Email</label> 

         <div class="input-group input-group-lg"> 
           <span class="input-group-addon"> 

           </span> 
          <input id="email" type="email" name="email" class="form-control input-lg" 
            placeholder="Email"> 
         </div> 

        </div> 
       </fieldset> 
       <div class="form-actions"> 
        <button type="submit" name="submit" class="btn btn-block btn-lg btn-danger"> 
         </span> 
         <small>Submit</small> 
        </button> 
        <div class="forgot"><a href="not important">Not a member? Join here!</a></div> 
       </div> 
      </form> 
+1

你可以发布表单代码,看起来像'$ username'可能没有设置 – Chitowns24

+0

我在第14行看不到bind_param()。你确定你发布了正确的代码吗? –

+0

它可能源于你的'$ db' init行,因为查询看起来好像很好 –

回答

1

总是这行的mysqli连接之前

mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT); 
+0

好吧,我输入,我得到了这个'致命错误:未捕获的异常'mysqli_sql_exception'与消息'你的SQL语法中有错误;检查与您的MySQL服务器版本相对应的手册,以便在/var/www/html/db/register.php:14堆栈跟踪:#0/var/www/html/db/register.php(14):mysqli-> prepare('SELECT * FROM u ...')#1 {main}抛出/var/www/html/db/register.php on line 14' – EGNFred

+0

很可能你使用的是查询而不是准备在你运行的真实代码中,而不是你在这里发布的代码 –

+0

我在这里的代码与我正在使用的代码相同。唯一的区别是在这里我没有包括会话开始。 – EGNFred

3

我假设你使用的是ext/mysqli,因为bind_param()是该扩展的一部分。

Mysqli不支持命名参数。您必须使用位置参数与?占位符。

此外Mysqli的bind_param()有一个不同的用法,比你使用它的方式。你必须绑定所有参数,第一个参数是一个“控制”参数。我建议你阅读documentation的例子。

PDO支持命名参数,并且您可以将每个调用的一个参数绑定到bindParam()

+0

我不认为OP看到了你的答案,甚至不知道如何修正他/她的代码。这是最可能的答案。另外,OP状态['在评论'](http://stackoverflow.com/questions/22798530/mysqli-php-fatal-error-call-toa-a-member-function-bind-param-on-a-非对象#comment34765400_22798568),他/她之前使用过相同的代码,但没有'session_start();',* hm *,我非常怀疑代码是“用过”工作的。 –

+0

@ Fred-ii-我什么时候说过它曾经工作过?我说过,这个代码和我所拥有的唯一区别在于它不包含会话开始,没有什么大不了的。是的,我确实看到了这个答案,并将其考虑在内,实际上它有所帮助,我正在努力解决它,是的,我不知道如何解决它,因为你说。 – EGNFred

+0

['在您的评论中](http://stackoverflow.com/questions/22798530/mysqli-php-fatal-error-call-to-a-member-function-bind-param-on-a-non-object #comment34765400_22798568)@ user43268或者,我有梦想吗? –

相关问题