0

我正在尝试使用准备好的语句设置我的数据库处理,但我有点卡住了。我没有收到任何错误消息,并且数据没有放入数据库中。我有点担心这只是一个愚蠢的错误,但如果你能帮助我,我将不胜感激。

我正在使用 php 和 mysql 数据库。

您可以在下面看到创建人的功能。getConnection() 将打开到变量 $link 的数据库连接,如果没有发生错误,则返回 true。

public function createUser($userName, $password)
{
    if($this->getConnection() === true) {
        $stmt = mysqli_prepare($this->link, 'INSERT INTO users (Username, Login, Password) VALUES (?, ?, ?)');
        mysqli_stmt_bind_param($stmt, 'sss', $userName, $userName, $password);
        mysqli_stmt_execute($stmt);
        mysqli_stmt_close($stmt);
    }
    $this->link->close();   
}

如果你有什么想法,我会很高兴。我愿意接受建议。

提前致谢

/Pyracell

4

1 回答 1

2

如果 MySQL 查询失败,MySQLi 不会总是抛出错误,所以如果事情不工作,你必须在每一步检查哪里出了问题。为此mysqli_error()mysqli_stmt_error()是你的朋友。

作为错误检查的一个矫枉过正的例子(出于调试目的,一旦工作正常,它就可以缩减),例如:

public function createUser($userName, $password)
{
    if($this->getConnection() === true) {
        $stmt = mysqli_prepare($this->link, 'INSERT INTO users (Username, Login, Password) VALUES (?, ?, ?)');
        if ($stmt != FALSE) {
            $bind = mysqli_stmt_bind_param($stmt, 'sss', $userName, $userName, $password);
            if ($bind == FALSE) {
                echo 'Bind failed: '.mysqli_stmt_error($stmt);              
            } else {
                $exec = mysqli_stmt_execute($stmt);
                if ($exec == FALSE) {
                    echo 'Execute failed: '.mysqli_stmt_error($stmt);
                }
            }
            mysqli_stmt_close($stmt);
        } else {
            echo 'Prepare failed: '.mysqli_error($this->link);
        }
    } else {
        echo 'Failed connecting to database: '.mysqli_connect_error();
    }
    $this->link->close();   
}
于 2012-07-19T01:25:42.090 回答