2016-10-18 8 views
0

Moodleコアの中に、クエリをデータベースに送信するときには、preg_match_allを探しています:(コロン)、クエリのパラメータを見つけるためです。php preg_match_all引用符を避ける

数字、コロン、および文字「( "102516101:t")で構成された文字列(「」)があります。

もちろん、パラメータには意味がありません。まだMoodleはコロン(:)のために1つを期待しています。

どうすればいいですか?preg_match_all見積もり記号を探していますか? または誰かに別のアイデアがありますか?

+0

引用符で囲まれたプレースホルダは、プレースホルダとして読み取られるべきではありません。コードを追加できますか? – chris85

+0

ねえ、ありがとう。これはSQLスクリプトです: – Lihi

+0

こんにちは、ありがとう。コードはもっと複雑ですが、基本的には 'SELECT DISTINCT GM.userid、U.firstname、U.lastname FROM'。$ CFG-> dbnameです。 '.mdl_groups G WHERE G.name = "102516101:t"' preg_match_allへの呼び出し - '$ named_count = preg_match_all(' /(?<!:):[az] [a-z0-9 _] */'、$ sql、$ named_matches); ' – Lihi

答えて

2

上記のコメントによれば、SQLステートメントで使用される変数を明示的に指定する必要があります。つまり、SQLステートメントを手作業で構築する必要はありません。

例:

$sql = "SELECT * FROM {groups} WHERE name = :name"; 
$params = array('name' => '102516101:t'); 
$DB->execute($sql, $params); 

あなたはまた、そのテーブル名は、次のように指定されている注意しましょう:{table_name}、彼らは自動的に右の接頭辞で展開されます。

+0

これは完全に働いた..ありがとう! – Lihi

+0

問題ありません!この回答に選択された回答としてフラグを立ててください。 – FMCorz