2017-12-29 7 views
-1

여러 검색 매개 변수로 데이터베이스를 검색하려고합니다. 그러나, 나는 항상 전체 테이블을 출력으로 얻는다. 사용자는 HTML 양식에서 하나 이상의 필드를 채우기로되어 있습니다. 양식을 제출 한 후 사용자 매개 변수와 일치하는 항목 만 표시해야합니다. 하나의 매개 변수 만 가지고도 잘 작동했습니다. 당신은, 당신은 문자열 연결을 사용하는 쿼리에 매개 변수를 사용하지 않는여러 매개 변수가있는 PDO 데이터베이스 검색

if (isset($_POST['submit'])) 
{ 
    try 
    { 
     require "../config.php"; 
     require "../common.php"; 

     $connection = new PDO($dsn, $username, $password, $options); 

     $sql = "SELECT * 
       FROM medisGO_patient 
       WHERE lastName LIKE '%" . $lastName . "%' 
       AND firstName LIKE '%" . $firstName . "%' 
       AND birthday LIKE '%" . $birthday . "%' 
       AND course LIKE '%" . $course . "%' 
       AND id LIKE '%" . $no . "%'"; 

     $lastName = trim($_POST['lastName']); 
     $firstName = trim($_POST['firstName']); 
     $course = trim($_POST['course']); 
     $birthday = trim($_POST['birthday']); 
     $no = trim($_POST['no']); 

     $statement = $connection->prepare($sql); 
     $statement->bindParam(':lastName', $lastName, PDO::PARAM_STR); 
     $statement->bindParam(':firstName', $firstName, PDO::PARAM_STR); 
     $statement->bindParam(':birthday', $birthday, PDO::PARAM_STR); 
     $statement->bindParam(':course', $course, PDO::PARAM_STR); 
     $statement->bindParam(':id', $no, PDO::PARAM_STR); 
     $statement->execute(); 
     $result = $statement->fetchAll(); 

    } 
    catch(PDOException $error) 
    { 
     echo $sql . "<br>" . $error->getMessage(); 
    } 
} 
+0

당신이 –

+1

이'$ 될 sql' 안 준비된 문에 제대로 설명서를 읽어 보지 않았 '$ lastName' 대신': lastName'과 같은 바인드를 참조합니까? 그렇지 않으면 왜 준비된 성명서를 귀찮게합니까? 또한 ... 왜'$ lastName'과 같은 변수를 처음 사용되는'SELECT' 문 다음에 선언하고 있습니까? 다음 번에 –

+0

, RTM http://php.net/manual/en/pdo.prepared-statements.php –

답변

0

:

내 코드입니다. 더욱이, 아직 존재하지 않는 변수를 연결하고 있으므로 PHP는 빈 문자열을 대체합니다. 본질적으로, 당신이 구축하고있는 쿼리는 다음과 같습니다

SELECT * 
FROM medisGO_patient 
WHERE lastName LIKE '%%' 
AND firstName LIKE '%%' 
AND birthday LIKE '%%' 
AND course LIKE '%%' 
AND id LIKE '%%' 

당신은 전체 테이블을 얻고있는 이유 그.

당신이해야 당신이 값으로 % 표지판을 추가해야하지만, 대신 명명 된 매개 변수를 사용하여 수 :

$sql = "SELECT * 
     FROM medisGO_patient 
     WHERE lastName LIKE :lastName 
     AND firstName LIKE :firstName 
     AND birthday LIKE :birthday 
     AND course LIKE :course 
     AND id LIKE :id"; 

$lastName = '%' . trim($_POST['lastName']) . '%'; 
$firstName = '%' . trim($_POST['firstName']) . '%'; 
$course = '%' . trim($_POST['course']) . '%'; 
$birthday = '%' . trim($_POST['birthday']) . '%'; 
$no = '%' . trim($_POST['no']) . '%'; 

$statement = $connection->prepare($sql); 
$statement->bindParam(':lastName', $lastName, PDO::PARAM_STR); 
$statement->bindParam(':firstName', $firstName, PDO::PARAM_STR); 
$statement->bindParam(':birthday', $birthday, PDO::PARAM_STR); 
$statement->bindParam(':course', $course, PDO::PARAM_STR); 
$statement->bindParam(':id', $no, PDO::PARAM_STR); 
$statement->execute(); 
관련 문제