0

問題は、phpページの形式で大きなテキストを入力しINSERT、SQLクエリを使用してデータベースに入力しようとすると、次のようなエラーが発生することです。

「SQL構文にエラーがあります。MySQLサーバーのバージョンに対応するマニュアルで、「サンプルタイトル」の近くで使用する正しい構文を確認してください。「雨季の長い月を小さな部屋に閉じ込めて過ごしました」 1行目」

クエリは次のとおりです。

$sql = "INSERT INTO `d` (`user_id`, `title`, `message`) VALUES ($user_id, '$topic', '$message')";

興味深いのは、手動で値を挿入してphpmyadminでクエリを実行しても、エラーが発生しないことです。

4

2 に答える 2

2

文字列には一重引用符(')があるに違いありません。$topicINSERTで使用する前にエスケープしてください。

于 2012-08-11T19:02:49.823 に答える
1

プリペアドステートメントを使用します。

$db = new PDO(...);
$stmt = $db.prepare("INSERT INTO `d` (`user_id`, `title`, `message`) VALUES ($user_id, :topic, :message)");
// I'm assuming that title is a VARCHAR(50) and message is a VARCHAR(500)
$stmt->bindParam(":topic", $topic, PDO::PARAM_STR, 50);
$stmt->bindParam(":message", $topic, PDO::PARAM_STR, 500);
$stmt->execute();

これにより、データをエスケープ/適切に渡す作業がデータベースエンジンの手に委ねられます。これはデータが属する場所です。可能な限り、ユーザー入力からSQL文字列を作成することは避けてください。そうすれば、潜在的なSQLインジェクション攻撃の多くを回避できます。

于 2012-08-11T19:07:44.130 に答える