2017-11-26 4 views
1

php 및 mysql과 함께 매개 변수가있는 쿼리에 LIKE 절을 사용하려고합니다. 내가 시도 할 때마다, 나는 다른 오류를 얻고있다.PHP LIKE 절이있는 매개 변수가있는 매개 변수가있는 mysql 문은 동기화되지 않은 명령을 반환합니다.

here, herehere의 솔루션을 구현하려고했습니다. 이들 각각은 서로 다른 오류를 던지고 있으므로 문제는 제가 실종되었다는 것입니다. 실행 함수에서 배열을 사용하려고하면 Command가 동기화되지 않습니다. 값 또는 매개 변수를 바인딩하려고하면 문자열 오류에 바인드 할 수 없습니다.

나는 실종됐다.

도움 주셔서 감사합니다.

<? 
    $access = 3; 
    $dbConnect = true; 
    require "../scripts/php/scriptSecurity.php"; 

    // Partial name given by user. 
    $namePart = $_GET["namePart"]; 

    // Deal with name parts. last, first middle or first middle last, or first last 
    if (strpos($namePart, ',') !== false){ 
     $arr_name = explode(",", $namePart); 
     $lName = $arr_name[0]; 
     if (strpos($arr_name[1], " ") !== false){ 
      $firstName = substr($arr_name[1], 0, strpos($arr_name[1], " ", 1)); 
      $middleName = substr($arr_name[1], strpos($arr_name[1], " ", 1)); 
     } 
    } 
    elseif (strpos($namePart, " ") !== false){ 
     $arr_name = explode(" ", $namePart); 
     if (sizeOf($arr_name) == 3) {  
      $fName = $arr_name[0]; 
      $lName = $arr_name[3]; 
      $mName = $arr_name[2]; 
     } 
     elseif (sizeOf(arr_name) == 2) { 
      $fName = $arr_name[0]; 
      $lName = $arr_name[1]; 
      $mName = $arr_name[1]; 
     } 
     else { 
      $fName = $namePart; 
      $mName = $namePart; 
      $lName = $namePart; 
     } 
    } 
    else { 
     $fName = $namePart; 
     $lName = $namePart; 
     $mName = $namePart; 
    } 
    // Get rid of extra spaces. 
    $fName = str_replace(" ", "", $fName); 
    $lName = str_replace(" ", "", $lName); 
    $mName = str_replace(" ", "", $mName); 
    // build query 
    $query = "SELECT LastName, FirstName, MiddleName, StudentId, Gender, Grade, GradYear FROM students WHERE LastName LIKE ? OR FirstName LIKE ? OR MiddleName LIKE ? ORDER BY LastName, FirstName LIMIT 20"; 
    $stmt = $connect->prepare($query); 
    // execute 
    $stmt->execute(array('%'.$lName.'%', '%'.$fName.'%', '%'.$mName.'%')); 
    $result = $stmt->get_result(); 
    // post results 
    if (!$result) { 
     echo $connect->error; 
     echo "No Results"; 
    } 
    else { 
     echo "Results"; 
     while ($row = $result->fetch_assoc()){ 
      ?> 
       <div><? echo $row["LastName"] . ", " . $row["FirstName"] . "(" . $row["StudentId"] . ")"?> </div> 
      <?php 
     } 
    } 
?> 

답변

0

당신은 당신이 빠른 응답을

$query = "SELECT LastName, FirstName, MiddleName, StudentId, Gender, Grade, GradYear 
    FROM students 
    WHERE LastName LIKE concat('%',?, '%') 
    OR FirstName LIKE concat('%',?, '%') 
    OR MiddleName LIKE concat('%',?, '%') 
    ORDER BY LastName, FirstName 
    LIMIT 20"; 
    $stmt = $connect->prepare($query); 
    // execute 
    $stmt->execute(array($lName, $fName, $mName)); 
+0

감사를 CONCAT와 wildchar을 관리하는 간단한 방법을 사용하고 PARAM으로 순수한 var에 할당 할 수 있습니다 잘못된 방법으로 wildchar와 PARAM에 문자열을 전달합니다. 나는 이것을 시도하고 지금 얻고있다 : boolean – edumacator

+0

에 멤버 함수 bind_param()을 호출했다. lastname 컬럼 이름을 놓쳤다. .. 어디에서 .. 누락 된 코드를 추가하면 .. 왜 downvote ??? – scaisEdge

+0

Ok ... 코드에서 실수를했습니다. 그냥 고쳐서 이제는 결과를 얻지 만 첫 번째 캐릭터에 대한 결과 만 얻고 있습니다. $ namePart가 하나의 문자라면, 그 문자로 상위 20 개의 결과를 얻습니다. 두 번째 문자를 입력 할 때 오류가 발생하지 않지만 결과가 없습니다. – edumacator

관련 문제