ホームページ  >  記事  >  バックエンド開発  >  SQL スプライシングについて質問がありますか? ?

SQL スプライシングについて質問がありますか? ?

WBOY
WBOYオリジナル
2016-06-23 14:21:55926ブラウズ

SQL スプライシングの問題?

要件: 都道府県、顧客名、換気時間の 3 つの条件に従って並べ替えます。これら 3 つの並べ替え条件はすべてチェック ボックスで選択できます。
$MYSQL->クエリ。 ("select * from customer cu " .$where);


並べ替え条件:
d05f485e53da3a467a4f6333ae013c6d都道府県
928f5498fbf1283fcd30a0f4e4075d42顧客名
b40800cac27ac57096889215f30f10cb換気時間

ソート条件をsqlの後ろに連結

if($sel_key10){
$where=$where." order by cu.province "; // 保存
}
if($sel_key11){
$where .= " ,cu.KFName"; // 顧客名
}
if($sel_key12){
$where .= " ,cu.GiveGasTime "; // 換気時間
}

このように接続に問題があります。ソート条件として州だけを使用する場合は問題ありませんが、他の条件を単独で使用すると間違っています同時に、州、顧客名、換気時間に応じて 2 または 3 を使用する場合、この順序も正しいです

実際、私が必要とする SQL は次のとおりです:

select * from customer cu where 1= cu.KFName,cu.GiveGasTime による 1 つの順序。条件がない場合は、括弧内に追加します。 。


並べ替え条件: 都道府県 顧客名 換気時間


ディスカッションへの返信(解決策)

こんな風に書けます

$where = array();if($sel_key10){$where[] =" cu.province ";  // 省}if($sel_key11){$where[] =" cu.KFName";  // 客户名称}if($sel_key12){$where[] = " cu.GiveGasTime ";  // 通气时间 }$MYSQL->query("select * from customer cu " . (!empty($where) ? 'order by '. implode(',',$where) : '');

テストコード
<form method=post><input type="checkbox" name="sel_key10" />省份<input type="checkbox" name="sel_key11" />客户名称<input type="checkbox" name="sel_key12" />通气时间<input type=submit></form><?php$dict = array(  'sel_key10' => 'cu.province', // 省  'sel_key11' => 'cu.KFName', // 客户名称  'sel_key12' => 'cu.GiveGasTime', // 通气时间 );$sql = "select * from customer cu ";if($_POST) {  $t = array_intersect_key($dict, $_POST);  if($t) $sql .= 'order by ' . join(', ', $t);}echo $sql;

フォームを修正すると
<form method=post><input type="checkbox" name="o[]" value="cu.province" />省份<input type="checkbox" name="o[]" value="cu.KFName" />客户名称<input type="checkbox" name="o[]" value="cu.GiveGasTime" />通气时间<input type=submit></form><?php$sql = "select * from customer cu ";if(isset($_POST['o'])) {  $sql .= 'order by ' . join(', ', $_POST['o']);}echo $sql;
の処理が楽になります

修正するとフォームの処理が楽になります
<form method=post><input type="checkbox" name="o[]" value="cu.province" />省份<input type="checkbox" name="o[]" value="cu.KFName" />客户名称<input type="checkbox" name="o[]" value="cu.GiveGasTime" />通气时间<input type=submit></form><?php$sql = "select * from customer cu ";if(isset($_POST['o'])) {  $sql .= 'order by ' . join(', ', $_POST['o']);}echo $sql;

SQLインジェクションの脆弱性が生じやすいので注意して使用してください

#1と#2の方法は成功しませんでしたが、モデレータの#3の方法は成功しました。ありがとう。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。