0

以下のようなphpコードスニペットがあります:

function is_ancestor_of( $page_name = null, $post ) {

if(is_null($page_name))
return false;

// does it have a parent?
if (!isset( $post->post_parent ) OR $post->post_parent <= 0 )
return false;

//Get parent page
$parent = wp_get_single_post($post->post_parent);

 if ( $parent->post_name == $page_name ){
echo $parent->post_name.' - '.$page_name;
return true;
} else {
is_ancestor_of( $page_name, $parent );
}
}

このコード全体をmysqlデータベーステーブルに挿入し、ページで同じフォーマットで再度再試行したいだけです。INSERT INTO クエリを使用してこのコードをデータベースに挿入すると、特殊文字のためにコードが SQL クエリを壊すため、mysql 構文エラーが発生します。これを行う方法はありますか??

ありがとう。

4

3 に答える 3

3

mysql_real_escape_string()を使用して特殊文字をエスケープします。ただし、mysql_* 関数から離れて、たとえばPDOmysqli_*の使用を開始した方がよいでしょう。

編集 コメントで述べたように、コードを文字列として配置し、DB フィールドが正しいデータ型であることを確認してください。また、文字列 (またはコード) 全体で mysql_real_escape_string() (mysql_* の使用を主張する場合) を使用するようにしてください。

于 2012-07-15T18:22:34.560 に答える
3

ええ、あなたはこれを行うことができます。複数の方法:

  1. PDO - 実際にはこれが最良の選択肢です。PHP マニュアルでこのトピックを調べてください。これは、PHP で MySQL クエリを破損から保護するだけでなく、はるかに役立つ可能性があります。
  2. addslashes() - エスケープ文字にスラッシュを追加します。これにより、MySQL クエリが確実に壊れることはありません。
  3. mysql_real_escape_string()
  4. mysql_escape_string()

EDITED PDOは他のオプションよりもはるかに安全であり、PHPおよびMySQLでの作業中に使用できるものがはるかに多いため、この回答の以前のバージョンと比較してPDOを強調しました。

于 2012-07-15T18:25:11.160 に答える
0

挿入時にエラーがスローされないように、mysql_real_escape_string() を使用して php コードをエスケープする必要があります。次に、ステートメントを実行する場合は、ステートメントで eval() を実行します。データベースに保存されている html と php が混在している場合は、次のように eval を呼び出します。

 eval('?>'.$dbresult.'<?php');

データベースの結果で stripslashes() を確認してください

于 2012-07-15T18:34:34.307 に答える