0

ワイルドカード検索で org_name フィールドの任意のテキストを取得し、1 が含まれる INT フィールドを取得しようとすると、フォームに入力されます。

たとえば、誰かがフォームに Childminder と入力した場合、childminder INT フィールドに 1 が含まれるすべてのレコードが結果に表示されるようにします...

$sql_result= "SELECT * FROM table WHERE org_name LIKE '%" . $org_name . "%' 

OR carer LIKE '1'
OR childminder LIKE '1' ";
4

1 に答える 1

0

なぜそのようなことをするのかはわかりませんが、手動のクエリ連結の候補のように思えます (ヒント: やらないでください。痛いです)。PDO は列名のバインドをサポートしていないため、ライブラリやその他の確立されたソリューションから助けを得ようとしている場合は運が悪いです。

アップデート

スキーマが変更されず、SQLi が懸念される場合は、検索クエリと使用可能な (「一致する」) 列の配列を取得して処理し、一致する列を報告する一致メカニズムを使用できます。次に、安全なデータからクエリを作成するだけです。サンプルコード:

$columns = array(/* ... */);
$query = '/* ... */';
$matches = array();
foreach($columns as $column) 
    { 
    if(preg_match('/'.$column.'/', $query)) 
        { 
        $matches[] = $column; 
        } 
    }

$sqlQuery = 'you select';
foreach($matches as $match)
    {
    $sqlQuery .= ' OR '.$match.' = 1';
    }

正確なコードではありませんが、アイデアは得られるはずです。

于 2012-06-14T22:39:00.937 に答える