2012-03-26 4 views
0

私は、列と値が両方ともプリペアドステートメントを使った変数である検索を作成しようとしています。クエリは私が助けを必要とする場所です。複数の変数で検索するPHP/Mysql

$column=$_POST['filter'][0][columnName]; 
$value = trim($_POST['filter'][0][value]); 

$stmt = $mysql->prepare("select * from TABLE WHERE $column like '%$value%'"); 

は、私は私が他の値のためにも、一つの値と列2の列1を検索できるようにeachother-と組み合わせて使用​​する別の列と値のペアを指定できるようにしたいです。

ありがとうございました!

+1

いい目標のように聞こえるので、何が問題なのですか? – Robert

+1

あなたのコードはSQLインジェクション攻撃に対応しています。プリペアドステートメントを使用していて、プリペアドステートメントを使って実際にプリペアドステートメントのアンチインジェクション機能を使用していないと悪いです。 –

+0

Robert、Im複数の列を複数の列で検索する方法を理解しようとしています(可能であれば簡潔に)Marc、はい私はパラメータをバインドしています。 。しかし、見ていただきありがとうございます。 – Severian

答えて

0

私はPHPのmysqlライブラリは文を準備しているとは思わない。 $ mysql変数は実際にmysqliまたはpdo接続オブジェクトですか? mysqliので

、あなたのコードは次のようになります。

$dbconnection = new mysqli('localhost', 'my_user', 'my_password', 'my_db'); 
$stmt = $dbconnection->prepare("select * from TABLE WHERE $column like '%?%'"); 
$stmt->bind_param('s',$value); 

あなたがあなたのクエリに直接$columnを挿入立ち往生していることを意味し、列名、のパラメータをバインドする方法はありません。ユーザーがPOSTで渡した値でこれを行うには、少しのセキュリティホールが必要です。列名の1つと同じものに制限されているので、最初にそれを検証して、別のものに設定されていないことを確認することをお勧めします。

+0

ええ、そのmysqli、申し訳ありません。私はできるだけそれを分解しようとしていた。私はまだそれを動作させる最良の方法を理解しようとしています。私はセキュリティに取り組んでいます。ありがとうございました。カラム名のパラメータをバインドすることができなかったので、私はすでに助けてくれました。では、それをコード化する最良の方法は何でしょうか?私が持っている20の何かの列のうちの1つを確認して確認するとしたら、それは何ですか? – Severian

+0

サンプルコードのように、列名を変数として挿入することができます。 $ valueを使っているように、パラメータをバインドすることで得られるセキュリティは提供されませんが、承認された列名であることを確認している限り、問題ありません。 – octern

関連する問題