0

私は次のコードを書きましたが、データベースを更新していません.スクリプトの一部であり、動作しなくなりました..それを回避する方法を見つけることができません..提案が必要です

<?php
$link = mysql_connect('xxxxxxxx');
if (!$link) {
die('Could not connect: ' . mysql_error());
}

mysql_select_db("xxx", $link);


$usernames='aneeshxx';
echo $usernames;

$update = "INSERT sanjana SET $name ='$usernames'";
mysql_query($update, $link);

$update1 = "INSERT INTO sanjana (name)VALUES ($usernames)";
mysql_query($update1, $link);


?> 
4

4 に答える 4

3
$update = "INSERT sanjana SET $name ='$usernames'";

これはおそらくUPDATEステートメントとして意図されているため、更新の場合は次のようにする必要があります。

$update = "UPDATE sanjana set name = '$usernames'";

私はあなたの2番目のクエリが原因ではなく、nameどこにも定義されていないことを確認しました。これにより、テーブルのすべての行の列の値が $usernames の値に変更されることに注意してください。通常、このようなステートメントは条件によって制限されます。$name$namenamesanjanaWHERE 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 には、データベースに依存しないという利点もあるため、既存のコードで別のデータベースを簡単に使用できます。

于 2012-06-24T22:02:30.197 に答える
2

問題 1: 正しい "insert into" (新しいレコードを作成する) と "update" (既存のレコードを変更する) を使用する

問題 2: mysql_query() を呼び出す前にSQL 文字列を作成することをお勧めします。これにより、デバッグ用に印刷できます。

問題 3: エラーを検出することも良い方法です

例:

<?php
  $link = mysql_connect('xxxxxxxx')
    or die('Could not connect: ' . mysql_error());

  mysql_select_db("xxx", $link);

  $usernames='aneeshxx';
  $sql = "INSERT INTO sanjana (name) VALUES ('" . $usernames + ")";
  echo "sql: " . $sql . "...<br/>\n";
  mysql_query($sql, $link)
    or die(mysql_error());
于 2012-06-24T22:01:37.057 に答える
2

正しい update sql 句は次のようになります。

UPDATE table
SET column = expression;

また

UPDATE table
SET column = expression
WHERE predicates;

SQL: UPDATE ステートメント

クエリは次のようになります。

$update = "UPDATE sanjana SET $name ='$usernames'";
mysql_query($update, $link);

もちろん、更新する行 (id) を指定する必要があります。そうしないと、テーブル全体で列が に設定され$nameます$usernames

アップデート:

空のテーブルにデータを挿入するため、最初に $update1 クエリを実行してから $update クエリを実行する必要があります。UPDATE句は、空のテーブルに変更/挿入を行いません。

于 2012-06-24T21:56:56.780 に答える
0

更新 SQL 用の INSERT キーワードがあります。これは UPDATE に変更する必要があります。

$update = "UPDATE sanjana SET $name ='$usernames'";
于 2012-06-24T21:53:48.857 に答える