mysql Prepared语句,db中既没有错误也没有数据

时间:2012-07-18 19:47:25

标签: php mysql prepared-statement

我正在尝试使用预准备语句设置数据库处理,但我有点卡住了。我没有得到任何错误消息,数据没有放入数据库。我有点害怕这只是一个愚蠢的错误,但如果你能帮助我,我会很感激。

我正在使用带有mysql数据库的php。

下面你可以看到创建一个人的功能。 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

1 个答案:

答案 0 :(得分: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();   
}