0

そのため、UPDATE SQLクエリの問題が何であるかを理解しようとしており、ここで質問を検索して、データベーステーブルで更新されている実際のテキストに問題があることを確認しました。私のPHPアプリは、以下のように説明付きの簡単なWebサイトリンクをテーブル(リンク)に追加するだけのシンプルなものです:

<form action="update.php" method="post">
   <p><input type="text" name="description" value="<?php echo($desc); ?>" /></p>
   <p><input type="text" name="link" value="<?php echo($link); ?>" /></p>
   <p><input type="submit" value="Save Changes" /></p>
</form>

明らかに、このコードは edit.php ページからのものですが、update.php で UPDATE ステートメントを実行しようとすると、構文に問題があることを示すエラーがスローされます。これは、たとえばテキストに ' がある場合にのみ発生するようです。

説明:「ママの授業サイト」

「Mum's」の ' を削除して「Mums」にすると、問題なく更新されます。なぜこれが行われるのか、問題を解決するための救済策/コードについて誰かが説明できますか?

事前に助けてくれてありがとう!

デイブ。

4

3 に答える 3

1

データベースの処理に PDO を使用する

最初にデータをサニタイズすることをお勧めします

$data = sanitize("Mom's");    
function sanitize($data){
        $data= htmlentities(strip_tags(trim($data)));
        return $data;
    }

安全な方法

$name = "Mom's";
$db = new PDO('mysql:host=localhost;dbname=databasename', $user, $pass); 
//establish new connection

$statement = $database->prepare("UPDATE TABLE xyz SET name=?");
$statement->execute(array($name));

これにより、より安全になります。手動でエスケープする必要はありません。

または使用

$msg =  mysql_real_escape_string($string);

データを挿入する前に

于 2013-09-29T13:26:25.003 に答える
0

最終的に Update ステートメントに変換されると、次のようになるためです

...somecolname = 'Mum's.....'

一重引用符は文字列の末尾のように見えます。2 つの単一引用符に置き換える必要があります。ステートメントにまとめる前に

于 2013-09-29T13:22:52.333 に答える
-1

SQL に ' を挿入するのは危険なので、エラーがスローされます。これは SQL インジェクションと呼ばれます。htmlentities() や addslashes() などの PHP 関数を使用して、挿入前の ' を処理してみてください。

于 2013-09-29T13:20:22.117 に答える