PHP致命错误:在非对象上调用成员函数bind_param()(PHP-MySQL PreparedStatement)

时间:2015-03-09 12:07:23

标签: php mysql sql-server

我知道这里曾多次询问过这个问题,但我向你们保证,我尝试了所有的建议,但这对我没有帮助。 (我猜因为这个错误是由很多因素造成的)。

这是我的代码:

$stmt = $conn->prepare("INSERT INTO User (Username, Password, Email, Race) VALUES (?, ?, ?, ?)");
        $stmt->bind_param("ssss", $Username, $Password, $Email, $Race);

    if($stmt->execute())
    {
        $stmt = $conn->prepare("SELECT Id FROM User WHERE Username=?");
    if ($stmt === FALSE)
    {
        echo ($this->conn->error);
    }
        $stmt->bind_param("s", $Username);
        if($stmt -> execute())
        {
            $stmt -> bind_result($idd);
            $stmt -> fetch();
            echo $idd;
            $acre=1000;
            $alertlevel=0;
            $offperc=0;
            $deffperc=0;
            $userlevel=1;
            $upgradeavail=0;

            $stmt = $conn->prepare("INSERT INTO Info (idd, acre, alertlevel, offperc, deffperc, userlevel, upgradeavail) VALUES (?, ?, ?, ?, ?, ?, ?)");
            $stmt->bind_param("iiiiiii", $idd, $acre, $alertlevel, $offperc, $deffperc, $userlevel, $upgradeavail);

            if($stmt -> execute())
            {
                echo "";
            }
            else
            {
                echo "false";
            }
        }
        else
        {
            echo "false";
        }
    }
    else
    {
        echo "false";
    }

那是我的SQL表:

  

表用户:Id *(int和primary)*用户名*(varchar)*     密码*(varchar)*电子邮件*(varchar)*年龄*(int)*

     

表信息:IdPrimary *(int和primary)* idd *(int)* acre *(int)*   alertlevel *(int)* offperc *(int)* deffperc *(int)* userlevel *(int)*   upgradeavail *(INT)*

给我错误的那个位于第57行,即:

$stmt->bind_param("iiiiiii", $idd, $acre, $alertlevel, $offperc, $deffperc, $userlevel, $upgradeavail);

我用这个来确保选择准备工作确实有效。

if ($stmt === FALSE)
{
    echo ($this->conn->error);
}

这表明我确实能够从表User

中获取Id
  echo $idd; 

很抱歉这篇长篇文章,但我想给你所有可能的细节:) 谢谢你的帮助!

2 个答案:

答案 0 :(得分:1)

我注意到你的标记中的空格。我不确定这是否允许。我自己从未这样做过,所以我无法确定地说话。

你有if($stmt -> execute())的地方 也许你可以在空间关闭的情况下尝试一下,?

if($stmt->execute())

答案 1 :(得分:1)

事实证明你不能使用相同的$ stmt来INSERT到两个不同的表中。所以我所做的是创建一个名为$ connn的新$ conn并且它有效。 为什么它不可能插入两个不同的表是超出我的!希望有人能够阐明这一点。