0

ユーザー プロファイルの更新ページがあり、更新するフォームがいくつかあります。

NAME
SURNAME
password
phone

そして、私は大きなスクリプトなしでこの更新を行おうとしています。つまり、たとえば NAME が存在するかどうかなどを定義したくないということです。マークされたフォーム値が存在する場合、それが mysql で変更されることを望みます。mysqli_prepare ステートメントでこれが可能であることをどのように知っていますか。私はこのようにSQLを書きました

$stmt = "UPDATE table SET NAME=?,SURNAME=?,PASSWORD=?,PHONE=? WHERE email='" . $email . "'";

しかし、何かがおかしい、それを行う方法はありますか? また、なぜ mysqli_prepare を使用する方が良いのか、なぜ安全なのかアドバイスをお願いします。PS。私はそれで問題がないので、私はphpスクリプトを書きません

アップデート

SQLステートメントをマークし、phpのこのスクリプトの上にこれを書いています=>

if (isset($_POST['name']){
    $name = $_POST['name'];
} else {
    $name = null;
}

等々 ...

しかし、それは実行されません.SQLステートメントに何か問題があると思うので、エラーメッセージは何も表示されません

詳細の一部が満たされている場合は更新され、すべてのフィールドがすべて更新されている場合は、スクリプトでどのように書くのですか?

SQL ステートメントのこの疑問符が理解できません。たとえば、NAME が存在しない場合は無視されるということですか?

4

1 に答える 1

1

SQL 文字列の疑問符は、SQL 構文の一部ではなく、実際のパラメーターのプレースホルダーです。このようにしたい場合は、最初に SQL ステートメントを作成し、次にパラメーターを設定する必要があります。

何かのようなもの

$con = new mysqli($hostname,$username,$password,$database);
$statement = $con->prepare( "UPDATE table SET NAME=?,SURNAME=?,".
                            "`PASSWORD`=?,PHONE=? ".
                            " WHERE email=?");
$statement->bind_param("sssss",$name,$surname,$pass,$phone,$email);

http://www.xphp.info/security/getting-started-with-mysqli/から派生した例

また、ThiefMaster のコメントに注意してください:は MySQL の予約語なので、バッククォート ( )passwordに入れる必要があります。``

または、最初に電子メール アドレスで行ったように、値を mysql 文字列に直接挿入します。その場合、値をエスケープする必要があります。mysql_real_escape_string()

どちらの場合も、すべての値を、設定されたものNULL、文字列などに置き換えていることに注意してください。

于 2012-07-21T10:27:54.000 に答える