0

PHP ページの SQL クエリに問題があります。

私はphpにかなり慣れていないので、私に固執してください。

すべてを選択するクエリを作成できましたが、クエリに a を含めたいと考えてWHEREいます。問題は、html コードであるため、結果に引用符が含まれることです。

これは簡単だと思いますが、誰でも助けることができます...以下の問題コード:

$result = mysql_query("SELECT * FROM myTable WHERE text = '<span class="myclass">Here is my text</span>'");
4

4 に答える 4

3

簡潔な答え

引用符をエスケープします。

$result = mysql_query("SELECT * FROM myTable WHERE text = '<span class=\"myclass\">Here is my text</span>'");

正解

ほとんどの場合、このクエリは動的に作成されます (つまり、文字列<span class=\"myclass\">Here is my text</span>は変数に含まれています。これを と呼びましょう$searchTerm)。

最初に変数の内容をエスケープせずに、埋め込み変数を使用して SQL クエリを実行しないでください。これにより、このような問題が防止されるだけでなく、アプリケーションに対する SQL インジェクション攻撃も防止されます。

$searchTerm上記の変数を仮定すると、正しい方法は次のようになります。

$query = sprintf('SELECT * FROM myTable WHERE text = \'%s\'',
                 mysql_real_escape_string($searchTerm));
$result = mysql_query($query);

完全に正解

PHP の PDO 拡張機能を使用すると、この機能に簡単にアクセスでき (変数バインディングを参照)、100% 安全です (そうでmysql_real_escape_stringはありませんが、トピックが高度すぎてここで説明することはできません)。

于 2011-03-12T13:04:59.320 に答える
1

を使用して引用符をエスケープできます\"。より良い: を使用して自分のものをエスケープしますmysql(i)_escape_string。最善: 準備済みステートメントで PDO を使用し、すべてをエスケープさせます。

于 2011-03-12T13:05:45.667 に答える
0

そのようにエスケープ"記号:\"

于 2011-03-12T13:05:38.550 に答える
0

あなたのコードには多くの問題があります。

現在の問題は SQL 関連ではなく、PHP 構文関連です。構文の強調表示からもわかるように、二重引用符は文字列を分割します。

$sql = "SELECT * FROM myTable WHERE text='<span class="myclass">Here is my text</span>'";

したがって、区切り引用符をエスケープする必要があります。

$text = "<span class=\"myclass\">Here is my text</span>";

または別の引用符を使用する

$text = '<span class=\"myclass\">Here is my text</span>';

次に、問題は SQL 関連です。文字列をそのままクエリに入れることはできません。クエリのためにエスケープしてから、クエリに入れる必要があります。

$text = '<span class=\"myclass\">Here is my text</span>';
$text = mysql_real_escape_string($text);
$sql = "SELECT * FROM myTable WHERE text='$text'";

最後に、クエリを間違って実行しています。横書きではなく、縦書き。オペレータを 1 つの大規模な事業所ではなく、別の事業者に配置します。そして、クエリ結果を常にチェックして、考えられるすべてのエラーを通知します。

$text = '<span class=\"myclass\">Here is my text</span>';
$text = mysql_real_escape_string($text);
$sql  = "SELECT * FROM myTable WHERE text='$text'";
$res  = mysql_query($sql) or trigger_error(mysql_error()." in ".$sql);
于 2011-03-12T13:12:43.333 に答える