2016-03-22 8 views
0

私のウェブサイトは、次のエラーを示していません:するpreg_match():するpreg_match():: '^' は次のコードで</strong></p> <p>が見つかりません終了区切り文字ホストはPHPのバージョン</p> <p><strong>警告を更新する際ませ終了delimite

<?php 
    $mid_str = " and mid != '0' and "; 
    if($_REQUEST['search']){ 
    mysql_select_db($database_myconn, $myconn); 
    $query_spages = "SELECT id, url, title, description, keywords, active, ip, catID, exp, pdate, 
        MATCH(title,description,keywords) 
        AGAINST ('$search_str' IN BOOLEAN MODE) AS score FROM pages 
        WHERE MATCH(title, description,keywords) 
        AGAINST ('$search_str' IN BOOLEAN MODE) " . $mid_str . " active = 'Yes' ORDER BY score DESC"; 


}else// not search fetch rand by catid 
    $query_spages = "SELECT * FROM pages where " . preg_match("^ and", "", $mid_str) . " active = 'Yes' and catID = '" . $_REQUEST['id'] . "' ORDER BY mid DESC"; 

mysql_select_db($database_myconn, $myconn); 
$spages = mysql_query($query_spages, $myconn) or die(mysql_error()); 
//$row_spages = mysql_fetch_assoc($spages); 

unset($settings); 
$settings = mysql_fetch_assoc(mysql_query('select * from settings where id = 1',$myconn)); 

?> 

答えて

1

preg_matchは、正規表現の開始と終了を予期します。 たとえば、preg_match("/^ and/", "", $mid_str)

あなたの場合、^は開始区切り文字とみなされますが、正規表現は^で終わらないため、エラーが発生します。開始区切りと終了区切りは何でもかまいませんが、おそらく/は他の特別扱いの文字と衝突しないように使用されています。

さらに、preg_matchpreg_replaceが混在している可能性があります。私はあなたがここにpreg_replaceしたいと思う、p.e.

$query_spages = "SELECT * FROM pages where " . preg_replace("/^ and/", "", $mid_str) . " active = 'Yes' and catID = '" . $_REQUEST['id'] . "' ORDER BY mid DESC";

+0

すごくうまいです。すべてのエラーが無くなった – ramesh

+0

私は助けることができる嬉しい:)ちょうど少数のヒントがそこにある。 '$ _REQUEST'のような外部からのクエリに追加したいものは、[mysqli_real_escape_string](http://php.net/manual/de/mysqli.real-escape-string.php)に忘れないでください。それ以外の場合は、[SQLインジェクション](https://en.wikipedia.org/wiki/SQL_injection)に脆弱です。 –

関連する問題