2010-11-27 18 views
0

私はつぶやきのメッセージIDからタグ情報を削除するためにpreg_splitを使用する等、これはTwitterから元の出力SQL構文エラーpreg_splitを使用して(「/、/」、

タグ:search.twitter.com 2005:[1]テーブルに

$arr = preg_split("/,/", "strip_tags(mysql_real_escape_string($status->id))"); 
    $msg_ID = $arr[1]; 

&挿入$ MSG_IDのような今、私は同じに適用されます:7551711354822656

私はpreg_splitは 'search.twitter.comタグ' を取り除くために適用されます。そのさえずり出力メッセージ内容は、私は、[1]テーブルに

$arr2 = preg_split("/,/", "strip_tags(mysql_real_escape_string($status->content))"); 
    $msg = $arr[1]; 

&挿入する$ MSGのように、それから 'Twitterのメッセージ1' を取り除くためにpreg_splitを適用

#DIYse_D DELIVERAB: twitter messages 1, 9th OCT 2010 

ですが、それは、SQL構文を上げますエラー。 OK、ここでは、$ status-> id出力で、twitterがidの先頭にタグを追加したのに対し、ここでは元のメッセージの内容の中に「twitter messages 1」を追加しました。ここで
は、SQL挿入クエリ

INSERT INTO msg2(id,msg,msg_id,depth,name) VALUES ('','$msg','$msg_ID','0','$name') 
+0

SQLコマンドを追加できますか? – thejh

+0

@thejh、私はOP文にsql insert文を追加しました – XCeptable

+0

カンマで区切るのに 'preg_split()'を使う必要があるのはなぜですか? – BoltClock

答えて

2
$arr = preg_split("/,/", "strip_tags(mysql_real_escape_string($status->id))"); 
         ^--here           ^--here 
$arr2 = preg_split("/,/", "strip_tags(mysql_real_escape_string($status->content))"); 
          ^---here            ^---here 

4二重引用符である私は、リテラルテキスト文字列の中に「コード」のこれらのビットをオンに示されました。あなたはstrip_tags関数呼び出しの結果を分割しようとしていません。あなたは "strip_tags(etc ...)"という文字列を分割しようとしています。二重引用符を削除すると、PHPは文字列ではなく関数呼び出しであることを確認します。

リテラル文字列にカンマがないため、$arr2[1]という値がないため、空白(またはnull)をデータベースに挿入しようとしています。

同様にあなたの関数の順序を変更します。データベースの挿入のためにエスケープ

mysql_real_escape_string(strip_tags(etc...)) 

は、あなたが挿入する前に行う最後のものでなければなりません。 strip_tagsがエスケープの順序を変更し、「悪い」文字列を生成し、SQLインジェクション攻撃を受けてしまう可能性があります。

+0

ありがとう – XCeptable