$update = "INSERT sanjana SET $name ='$usernames'";
これはおそらくUPDATEステートメントとして意図されているため、更新の場合は次のようにする必要があります。
$update = "UPDATE sanjana set name = '$usernames'";
私はあなたの2番目のクエリが原因ではなく、name
どこにも定義されていないことを確認しました。これにより、テーブルのすべての行の列の値が $usernames の値に変更されることに注意してください。通常、このようなステートメントは条件によって制限されます。$name
$name
name
sanjana
WHERE userid = 33
$update1 = "INSERT INTO sanjana (name) VALUES ($usernames)";
INSERTステートメントの場合、引用符で囲まれた値が必要です。
$update1 = "INSERT INTO sanjana (name) VALUES ('$usernames')";
変数をクエリ文字列に直接入れるこの方法は、SQL インジェクションに対して脆弱になることに注意してください。これに対抗するには、PDOまたはmysqli拡張機能を使用してください。どちらも、準備されたステートメントを提供することでインジェクションから保護します。単純な古い mysql_* の使用は推奨されなくなりました。
pdo を使用すると、次のような準備済みステートメントを使用できます
<?php
// we got $usernames from wherever you define it
$pdo = new PDO('mysql:dbname=mydb;host=localhost','username','password');
// to insert
$statement = $pdo->prepare('INSERT INTO `sanjana` (name) VALUES (:name)');
// the following replaces :name with $usernames in a safe manner, defeating sql injection
$statement->bindParam(':name',$usernames);
$statement->execute(); // it is done
// to update
$statement = $pdo->prepare('UPDATE `sanjan` SET `name` = :name');
$statement->bindParam(':name',$usernames);
$statement->execute(); // it is done
お分かりのように、悪意のある入力からコードを保護することは難しくなく、SQL ステートメントを読みやすくすることさえできます。SQL ステートメントで値を引用する必要さえなくなったことに気付きましたか? 準備されたステートメントがそれを処理します! コードでエラーが発生する方法が 1 つ少なくなります。
それを読んでください、それはあなたの頭痛を救います. PDO には、データベースに依存しないという利点もあるため、既存のコードで別のデータベースを簡単に使用できます。