2

次のSQL更新ステートメントがあり、変数は事前にサニタイズされています。情報はフォームから取得され、データベースの列は TEXT です。INSERTS は問題なく動作します。

DB構造:

file_title=テキスト file_description=テキスト ID=INT

mysqli_query($con,"UPDATE images
        SET file_title=$FileTitle, file_description=$FileDescription
        WHERE id=$image_id");

なんらかの理由で、イライラするテキストを使用して更新できないため、数値を使用してのみ更新できます。

本当に基本的な何かが欠けているに違いありません。アドバイスをいただければ幸いです。

4

4 に答える 4

1

テキストと文字列の値を引用符で囲む必要があります。

mysqli_query($con,"UPDATE images
        SET file_title='$FileTitle', file_description='$FileDescription'
        WHERE id=$image_id");

数値は引用符なしで渡すことができました。

于 2013-02-28T09:50:27.373 に答える
1

文字列を一重引用符で囲む必要があるためです。一重引用符は文字列リテラル用で、バッククォートは識別子用です。

UPDATE images
SET    file_title='$FileTitle', file_description='$FileDescription'
WHERE id=$image_id

補足として、変数のSQL Injection値が外部から取得された場合、クエリは脆弱です。予防方法については、以下の記事をご覧ください。を使用すると、値を一重引用符で囲む必要がなくなります。PreparedStatements

于 2013-02-28T09:51:52.963 に答える
0

CHAR値は引用符で囲む必要がありますが、さらに重要なことに、プリペアドステートメントを使用する必要があります。

$stmt = mysqli_prepare($con,"UPDATE images
    SET file_title=?, file_description=?
    WHERE id=?");
mysqli_stmt_bind_param($stmt, 'ssd', $FileTitle, $FileDescription, $image_id);
mysqli_stmt_execute($stmt);
于 2013-02-28T09:52:55.200 に答える
0

テキスト値には一重引用符を使用します。

mysqli_query($con,"UPDATE images
        SET file_title='$FileTitle', file_description='$FileDescription'
        WHERE id=$image_id");
于 2013-02-28T09:51:34.527 に答える