0

PHPで手動でエスケープすることを理解しようとしています。私はこの例を読みました:

    もし ($_POST)
  {    
    $クエリ = 'UPDATE
                ハーステラー
              設定
                zulieferer = \''.mysql_real_escape_string($_POST['zulieferer']).'\',
                telefon = \''.mysql_real_escape_string($_POST['telefon']).'\',
                city = \''.mysql_real_escape_string($_POST['telefax']).'\'
              どこ
                id = '.$_POST['id'];
    $update = mysql_query ($query) または die (mysql_error());
  }

ステートメントはアポストロフィで始まります。残念ながら説明は見つかりませんでした。

第一部?'UPDATE hersteller SET zulieferer = \'

第2部?「.mysql_real_escape_string($_POST['zulieferer'])」。

第3部?'、テレフォン = \'

第4部?「.mysql_real_escape_string($_POST['telefon'])」。

4

4 に答える 4

0

最初の部分は次のとおりです。

'UPDATE 
            hersteller 
          SET
            zulieferer = \''

余分に注意してください'

エスケープ文字は、文字列の末尾として解釈されるのではなく、文字として文字列に挿入されるように\、最初の文字をエスケープするために使用されます。'

これは次のようになります。

$message = 'Let\'s get started';

$query = 'INSERT INTO table SET value = \'' . $value . '\'';
于 2013-03-29T13:47:04.190 に答える
0

文字は、次の\文字を「プレーンテキスト」または意味のないテキストとしてマークします。このように、出力は次のようになりますzuliefer = 'thevalue'

この例では、すべての文字をエスケープする必要がない場合は、二重引用符で変数を開始できます。

$query = "UPDATE 
        hersteller 
      SET
        zulieferer = '" . mysql_real_escape_string($_POST['zulieferer'])."',
        telefon    = '".mysql_real_escape_string($_POST['telefon'])."',
        city        = '".mysql_real_escape_string($_POST['telefax'])."'
      WHERE 
        id = '".$_POST['id'] . "'";
$update = mysql_query ($query) or die (mysql_error());

- PHP 文字列の一重引用符と二重引用符の詳細

-エスケープに関するその他の資料

-文字列とその中の記号の意味に関する PHP マニュアル

于 2013-03-29T13:47:17.657 に答える
0

このコードは、次の 2 つの理由で少し読みにくいです。

  1. SQL ステートメント内および php 文字列に一重引用符を使用します。
  2. 複数の行にまたがる 1 つの長い文字列です。

これは読みやすいかもしれません:

$query = 'UPDATE '.
         '   hersteller '.
         'SET '.
         '   zulieferer = "'.mysql_real_escape_string($_POST['zulieferer']).'", '.
         '   telefon    = "'.mysql_real_escape_string($_POST['telefon']).'", '.
         '   city       = "'.mysql_real_escape_string($_POST['telefax']).'" '.
         ' WHERE  '.
         '   id = '.$_POST['id'];

編集:あなたのコメントについて:

$query = "DELETE FROM description WHERE id = '" . $this->getId() . "'";

これは、上記の書き直しと同じ目的を果たしますが、一重引用符と二重引用符の使用を交換するだけです。PHP の文字列区切り記号として二重引用符を使用し、SQL では単一引用符を使用します。PHP と MySQL の両方が両方の種類の引用符を使用できるため、どちらのバリアントも問題ありません。$query 変数には実際に が含まれますDELETE FROM description WHERE id = '1234'。ただし、両方のバージョンが構文的に同一ではないことに注意してください。PHP は、単一引用符とは少し異なる方法で二重引用符を処理します。二重引用符では、PHP は変数名をその変数の内容に置き換えますが、単一引用符では置き換えません。

$query = "DELETE FROM description WHERE id='$id'"; <-- PHP will insert the variable $id
$query = 'DELETE FROM description WHERE id="$id"'; <-- PHP will not touch the string
于 2013-03-29T13:48:55.237 に答える
0

ステートメントはアポストロフィで始まります。残念ながら説明は見つかりませんでした。

'PHP では、 のペアまたは のペアで文字列を定義できます"。主な違いは、"-strings も$変数を探すために評価されるという事実にあります。

'どちらの文字列タイプでも、または"文字を文字列に表示するために明らかにエスケープできます。

echo "He said \"Welcome\".";
// He said "Welcome".

たとえば、あなたの場合、 POST 変数が次の値に等しいと仮定すると、次のようになりxます。

'zulieferer = \''.mysql_real_escape_string($_POST['zulieferer']).'\''
// zulieferer = 'x'

その文字列は使用されないため、"次のようにリファクタリングすることをお勧めします。

$a = mysql_real_escape_string($_POST['zulieferer']);
$b = mysql_real_escape_string($_POST['telefon']);
$c = mysql_real_escape_string($_POST['telefax']);
$d = (int) $_POST['id'];
$query = "UPDATE hersteller 
          SET zulieferer = '$a', telefon = '$b', city = '$c'
          WHERE id = $d";

ちなみに、関数は使用しないでくださいmysql_*。代わりに準備済みステートメントを使用してください。

于 2013-03-29T13:50:29.783 に答える