2012-03-26 2 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%'"); 

가 I i가 다른 값에 대한 하나의 값과 두 개의 칼럼에 대한 항목을 검색 할 수 있도록 eachother-와 함께 사용하는 다른 열 값 쌍을 지정할 수 있도록하려는.

감사합니다.

+1

좋은 목표처럼 들리지만 문제가 무엇인가요? – Robert

+1

코드가 SQL injection 공격에 노출되어 있습니다. Prepared Statement를 사용하는 것이 좋으며, Prepared Statement의 Anti-Injection 기능을 실제로 사용하기 위해 placeholder를 사용하지 않는 것이 바람직합니다. –

+0

Robert, 여러 단어로 여러 열을 검색하는 방법을 알아 내려고 노력 중입니다. (가능하면 간결하게) 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에서 전달한 모든 값으로이를 수행하는 것은 약간의 보안 허점입니다. 열 이름 중 하나와 동일해야하므로 다른 이름으로 설정되지 않았는지 먼저 확인해 보시기 바랍니다.

+0

네, 그 mysqli, 미안 해요. 나는 가능한 한 그것을 무너 뜨리려고했다. 나는 여전히 최선의 방법을 찾아 내기 위해 노력하고 있으며, 나는 보안 문제를 해결할 것입니다. 감사합니다. 열 이름에 대한 매개 변수를 바인딩 할 수 없다는 것을 알지 못해서 이미 나를 도와줍니다. 그러면 코드를 작성하는 가장 좋은 방법은 무엇입니까? 내가 가지고있는 20 가지의 칼럼 중 하나를 확인하고 확인한다고 가정 해 봅시다. – Severian

+0

샘플 코드에서 수행하는 것처럼 열 이름을 변수로 삽입 할 수 있습니다. $ value를 사용하는 것처럼 매개 변수를 바인딩 할 때 제공되는 보안은 제공하지 않지만 승인 된 열 이름인지 확인하는 것이 좋습니다. – octern

관련 문제