0

準備済みステートメントを使用してデータベース処理をセットアップしようとしていますが、ちょっと行き詰まっています。エラーメッセージが表示されず、データがデータベースに入れられません。これは単なる愚かな間違いであると少し恐れていますが、助けていただければ幸いです。

私は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();   
}

アイデアがあれば、何が悪いのか、私はもっとうれしいです. 私は提案にオープンです。

前もって感謝します

/ピラセル

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 に答える