ホームページ > バックエンド開発 > PHPチュートリアル > SQL スプライシングについて質問がありますか? ?

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

WBOY
リリース: 2016-06-23 14:21:55
オリジナル
957 人が閲覧しました

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

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


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

ソート条件を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の方法は成功しました。ありがとう。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート