0

Procedural Mysqli を使用してテーブルに挿入しようとしています。エラーを投稿することも、情報をデータベースに投稿することもありません。これが私のコードです:

$query = "INSERT INTO Accounts (FirstName, LastName, Username, Password, Access) VALUES ({$_POST['FirstNameTbx']}, {$_POST['LastNameTbx']}, {$_POST['UsernameTbx']}, {$_POST['PasswordTbx']}, {$_POST['AccessDDL']})";
        mysqli_query($link, $query);
        mysqli_close($link);
        $Error .= "$query";

更新:準備済みステートメントに変更しました。現在、次のようになっています。

警告: mysqli_stmt::bind_param() [mysqli-stmt.bind-param]: 型定義文字列の要素数が、19 行目の /home/bryantrx/public_html/ec/add_user.php のバインド変数の数と一致しません

バインドする必要がある変数は 5 つだけで、UserID は自動インクリメントされるため、ステートメントでバインドまたは参照する必要はありません。

if ($stmt = $link->prepare("INSERT INTO Accounts (FirstName, LastName, Username, Password, Access) VALUES (?, ?, ?, ?, ?)")){
            $stmt->bind_param($_POST['FirstNameTbx'], $_POST['LastNameTbx'], $_POST['UsernameTbx'], $_POST['PasswordTbx'], $_POST['AccessDDL']);
            $stmt->execute();   
            $Error .= "success";
            $stmt->close();
        } else {
            echo $link->error;
        }
4

1 に答える 1

1

エラー メッセージを取得するには、mysqli_errorを呼び出す必要があります。

$error = mysqli_error($link);

prepareparametersを使用してクエリを作成すると、自分自身の生活が楽になります (そしてより安全になります) 。

$query = "INSERT INTO Accounts (FirstName, LastName, Username, Password, Access) 
            VALUES ( ?, ?, ?, ?, ?)";

if ($stmt = mysqli_stmt_prepare($link, $query)) {

    mysqli_stmt_bind_param($stmt, "sssss", 
                $_POST['FirstNameTbx'], 
                $_POST['LastNameTbx'], 
                $_POST['UsernameTbx'], 
                $_POST['PasswordTbx'], 
                $_POST['AccessDDL']);

    if (!mysqli_stmt_execute($stmt)) {
        $error = mysqli_stmt_error($stmt);
    }

    mysqli_stmt_close($stmt);

} else {
    $error = mysqli_error($link);
}

mysqli_close($link);

更新- わかりました。OO にスワップしましたが、これで問題ありません。bind_paramを使用する場合、最初のパラメーターはバインドするデータを記述します。この場合、5 つの文字列の場合は、次のように 5 つの「s」を配置します。

$stmt->bind_param("sssss", 
           $_POST['FirstNameTbx'], 
           $_POST['LastNameTbx'], 
           $_POST['UsernameTbx'], 
           $_POST['PasswordTbx'], 
           $_POST['AccessDDL']);
于 2013-01-28T22:52:19.163 に答える