2017-03-20 7 views
1

最近私は精算しているPHPコードがたくさんあります.SQL構文は大文字と小文字が異なります。私はそれを通過し、読みやすさに合わせるように修正しました。Sedを選択的に使用してSQL構文を置き換えます

私が使用している現在のコマンドは次のとおりです。

sed -i 's/select/SELECT/g;s/from/FROM/g;s/where/WHERE/g;s/limit/LIMIT/g;s/and/AND/g' /master/dashboard.php 

は問題はしかし、これらの言葉のいくつかは、HTMLフォームでエラーメッセージなどをポップアップ表示され、私はこれらのエラーを修正暇つぶしです。むしろ、より賢く働いていたいと思います。すべてのMySQLを想定すると

は、私が最初にそれの内部置換を行うことをクエリー部分を検索するためのsedの正規表現を取得するにはどうすればよいのそう

mysqli_query($mysqli_con,"select * from contacts where username='$username' and password='$password' and active='1'"); 

同様のフォーマットされていますか?

私はあなたに永遠に質問してくれるでしょう:私が正規表現を置換領域として使うことができれば、ファイルから単語のリストをフィードして `sed ?

ie:連絡先、ユーザー名、パスワード、会社などのファイルがあります。 sed - > `contacts`、` username`、 `password`、` etc`です。

例ファイル入力Snipit:あなたのクエリが1行にとどまると仮定すると、

session_start(); 
$username = preg_replace("%[^[email protected]]%","",$_SESSION['username']); 
$password = preg_replace("%[^-! [email protected]]%","",$_SESSION['password']); 
$date = date("r"); 
$ip = $REMOTE_ADDR; 

$query = mysqli_query($mysqli_con,"select * from contacts where username='$username' and password='$password' and active='1'"); 
$data = mysqli_fetch_array($query); 


if((mysqli_num_rows($query) == "0")) 
{ 
    $_SESSION['message'] = "<font color='red'><b>" . _("Invalid login") . ":</b> " . _("The username and password you entered are not valid.") . "</font>"; 
    header('Location: /index.php'); 
} 
else 
{ 
$_SESSION['username'] = $data['username']; 
$_SESSION['password'] = $data['password']; 
$_SESSION['accountid'] = $data['accountid']; 
$_SESSION['role'] = $data['role']; 

$getCompany = mysqli_query($mysqli_con,"select * from companies where companyid='" . $data['accountid'] . "'"); 
$dataCompany = mysqli_fetch_array($getCompany); 

include('/master/html/header.inc'); 
?> 
<script type="text/javascript"> 
    $(document).ready(function() 
    { 
     resizeDashboard(); 

     $(window).resize(function() { 
+1

あなたが選択した単語が、一見無制限の方法で壊される前記結果を、好きではないだろう。多くのキーワードがあります。 –

答えて

1

は、あなたが行だけを探すためにsedを制限することができます。

sed -i '/mysqli_query/s/select/SELECT/... 

/mysqli_query/addressである第一の部分、一致する行だけがsubstitution commandの影響を受けるようにします。

あなたにも1ですべてのsedコマンドを置き換えることができます。

sed -i -E '/mysqli_query/s/\b(select|from|where|limit|and)\b/\U\1/g' /master/dashboard.php 

\Uは、追って通知があるまで、大文字を使用するようにsedを伝えます。 \1は、検索のかっこ内にキャッチされた値に対してbackreferenceです。

大文字と小文字の変更はa GNU extensionで、BSD sed(たとえばmacOSなど)やその他の珍しいsedを使用している場合は機能しません。

+0

これは機能しました! フラグなどの内訳をありがとう、本当にありがとう。 –

関連する問題