0

phpのコードからそのままmysqlに10個のフィールドの値を挿入することになります。問題は、ユーザーがアポストロフィとコンマ (',) を挿入するたびに、クエリ コードが乱れることです。いくつかの機能があります。しかし、これらの関数からすべてのフィールドの値を解析する必要がありますか?? 時間がかからないでしょうか:P

ここに私のphpコードがあります

$rs = mysql_query("
    insert into 
        _{$pid}_item 
    values (
        '$pid',
        '$item_brand',
        '$item_code',
        '$item_name',
        '$item_quantity',
        '$item_mrp',
        '$i‌tem_discount',
        '$item_vat',
        '$item_sat',
        '$item_selling_price',
        '$item_rating',
        '$item‌​_image'
    )
"); 

これらの変数に値を渡しています..

4

5 に答える 5

4

のようなものを試すか、 を使用しているmysql_real_escape_string場合は をPDO使用しますPDO::quote

また、SQL インジェクション攻撃についてもお読みください。失敗したクエリを取得するだけの問題ではなく、他のすべてのユーザーの情報と同様に、攻撃者がデータベース全体にアクセスできるようにすることです。

さらに良いのは、準備済みステートメントを使用することです。これは次のようになります。

<?php
//Use of $pid in the table name is strange here (see comments section) and is
// dangerous unless you're generating it yourself entirely from known information
// sources. Otherwise you definitely need to sanitize it, which I don't think
// prepared statements or quoting can do.
$stmt = $dbh->prepare("
    INSERT INTO 
        :_{$pid}_item
    VALUES (
        :pid,
        :item_brand,
        :item_code,
        :item_name,
        :item_quantity,
        :item_mrp,
        :i‌tem_discount,
        :item_vat,
        :item_sat,
        :item_selling_price,
        :item_rating,
        :item‌​_image)
"); 

$stmt->bindParam(":pid", $pid);
$stmt->bindParam(":item_brand", $item_brand);
$stmt->bindParam(":item_code", $item_code);
//... etc ...
$stmt->execute();

?>
于 2013-08-07T16:46:55.817 に答える
2

問題に関する最も完全な説明は、ここで見つけることができます。

お気づきかもしれませんが、誰かが何かを入力してシス​​テムをクラッシュさせることができる場合、コードは正しく実装されていません。

上記の記事では、これを回避する最善の方法について説明しています。説明をよく読んで、自分のケースに最も適した方法を選択してください。:)

于 2013-08-07T16:53:57.180 に答える
-2

ヘッダーを確認する必要がある場合があります。

これはアポストロフィを受け入れません:

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

アポストロフィをうまく使用するには、ヘッダーでこれを使用するだけでよいでしょう。

<meta http-equiv="content-type" content="text/html; charset=iso-8859-1"/>
于 2013-12-13T13:41:01.727 に答える
-2
    $query = str_replace("\'","''", $query);
    $query = stripslashes($query);

私はこれらの 2 つの赤ちゃんを同様の状況で使用しています。苦情はまだ聞いていません。試してみる。またはそれで遊ぶ。

于 2013-08-07T16:48:16.810 に答える
-2

php 関数の addslashes() を使用します。

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

思ったほど時間はかかりません。目立たない。

于 2013-08-07T16:48:31.287 に答える