0

このメソッドを使用してデータベースにデータを保存しています:

$content = $_POST['content'];
$content = mysqli_real_escape_string($mysqli,$content);

$stmt = $mysqli->prepare("INSERT INTO na_posts(postuid,content) VALUES (?, ?)");
$stmt->bind_param("ss",$post_id,$content);
$stmt->execute();
$stmt->close();

そして、次のコードを使用してデータベースからデータを取得します。

$sql = "SELECT * FROM na_posts WHERE postuid = '" . $id . "'";
$stmt = $mysqli->query($sql);
$row = $stmt->fetch_Object();
echo nl2br($row->content);

しかし、出力は次のようになります。

これは 1 行目です \r\n これは 2 行目です

新しい行がこのように表示されるのはなぜ\r\nですか?

mysqli_real_escape_string()私が読んだように、セキュリティにとって重要な呼び出しを削除すると機能します。

4

1 に答える 1

7

mysqli_real_escape_stringここにあるように、バインドパラメーターを使用している場合は必要ありませんbind_param。どちらか一方です、両方は必要ありません。バインド パラメーターはさまざまな理由で優れています。主に、SQL の構築が容易になり、データベースもより効率的になる可能性があります (バインドされた値が異なっていても、同じクエリを 2 回実行する方が効率的である可能性があるため)。

値を出力するには、HTML でhtmlspecialcharsAlamri が述べたようなものを使用する必要があります。ほとんどの適切なテンプレート エンジンでは、デフォルトで値をエスケープできるため、毎回エスケープすることを覚えておく必要はありません。たとえば、symfonyはそのテンプレートでデフォルトで値をエスケープします (他の PHP Web フレームワークが利用可能です)。

于 2013-06-11T13:48:16.140 に答える