0

タイトルと説明領域を持つフォームをphpで作成しています。フォームを送信して MYSQL にデータを挿入しようとすると、タイトルのセミコロンが原因と思われるエラーが発生します。

SQL 構文にエラーがあります。MySQL サーバーのバージョンに対応するマニュアルで、1 行目の 's Club'、'Design and Develop'、'1')'付近で使用する正しい構文を確認してください。

クエリ

INSERT INTO Projects (ID, Title, Description, Status) 
        VALUES (0, 'Women's Club', 'Description of Project', '1')

mysql_real_escape_string() を使用しようとしていますが、まだこのエラーが発生しています。

セミコロンをmysqlに挿入できるようにするために使用する必要がある別の方法はありますか?

これが私が使用しているコードの一部です。

$desc =  mysql_real_escape_string($_POST['desc']);

$q = "INSERT INTO Projects (ID, Title, Description, Status) 
           VALUES (0, '$title', '$desc', '1')";

ご協力ありがとうございました。

4

4 に答える 4

3

エラーはあなたのものではありません$desc。代わりに、それはあなたのもの$titleです。

次の行も追加します。

$title = mysql_real_escape_string($title);

挿入クエリの直前。

補足: 関数は使用しないでくださいmysql_*。それらは廃止されました。

于 2013-01-26T18:19:42.940 に答える
1

mysqli_またはPDOバインドされたパラメーターを使用する必要があります。mysql_関数は非推奨になり、コードはSQLインジェクションに対して脆弱になります。魔法の引用符が無効になっていることを確認してください。

$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 Projects (ID, Title, Description, Status)  VALUES (0, ?, ?, 1)");
mysqli_stmt_bind_param($stmt, 'ss', $title, $desc);

/* execute prepared statement */
mysqli_stmt_execute($stmt);
于 2013-01-26T18:20:15.483 に答える
1

あなたはどうやら自分自身を注入しています。タイトルもエスケープする必要があります。

あなたのコードは非常に安全ではありません。クエリを使用したり、パラメータ化mysql_*しないままにしないでください(サニタイズする必要があります)。

$pdo = new PDO('mysql:host=localhost', $username, $password);
$stmt = $pdo->prepare("INSERT INTO Projects VALUES (null, ?, ?, 1)");
$stmt->execute($title, $desc);

magic_quotes_gpc有効になっている場合はstripslashes、POSTスカラー値で使用します。これはセキュリティには影響しませんが、これを行わないと、行に余分なスラッシュが追加されます。

于 2013-01-26T18:21:07.723 に答える
-1

特別なmysql文字にスラッシュを追加する必要があります。

http://php.net/manual/en/function.addslashes.php

于 2013-01-26T18:21:05.603 に答える