-1

重複の可能性:
DB に挿入すると、一重引用符を含む文字列でエラーが発生するのはなぜですか?
アポストロフィ (一重引用符) を含むデータを挿入すると MySQL エラーが発生しますか?

テキストエリアに一重引用符 (' ') を入れると、常にエラーが発生します

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'test'','1351029587','10/23/2012','0','0','1492815560','0')' at line 1

HTML削除機能を挿入しました:

$title = html_remove($title);
$body = html_remove($body);

function html_remove($input) {
    $old = array('<','>');
    $new = array('&lt;','&gt;');
    $input = str_replace($old, $new, $input);
    return $input;
    }

はい、$title と $body は有効で機能する変数です。

$body = $_POST['body'];
$title = $_POST['title'];

それがまさにあなたのやり方かどうかはわかりませんが、それが私が得たほとんどすべてです。

4

2 に答える 2

0

コードの使用を直ちに停止する必要があります。SQL インジェクションに対して脆弱です。さらに、mysql_関数は廃止されています。mysqli_またはPDO関数を使用してバインドされた変数を持つ準備済みステートメントを使用する必要があります。

strip_tags文字列から HTML および PHP タグを削除する関数、またはhtmlentities該当するすべての文字を HTML エンティティに変換する関数を調べることができます。違いと例については、こちらをお読みください。

正しい道に進むための例を次に示します。

<?php

$link = mysqli_connect('localhost', 'my_user', 'my_password', 'world');

/* check connection */
if (!$link) {
    printf("Connect failed: %s\n", mysqli_connect_error());
    exit();
}

$stmt = mysqli_prepare($link, "INSERT INTO myTable (body, title) VALUES (?, ?)");
mysqli_stmt_bind_param($stmt, 'ss', $_POST[body], $_POST[title]);

/* execute prepared statement */
mysqli_stmt_execute($stmt);

printf("%d Row inserted.\n", mysqli_stmt_affected_rows($stmt));

/* close statement and connection */
mysqli_stmt_close($stmt);

/* close connection */
mysqli_close($link);
?>
于 2012-10-23T22:13:29.293 に答える
0

準備済みステートメントで次の変数を使用します。

$body=htmlentities($_POST['body']);
$title=htmlentities($_POST['title']);

htmlentities()<and>&lt;andに変換し&gt;、実行された準備済みステートメントは'and"文字をエスケープします。\

于 2012-10-23T22:14:53.230 に答える