2017-11-26 10 views
1

phpとmysqlでパラメータ化されたクエリでLIKE句を使用しようとしています。私が試してみるたびに、私は別のエラーを得ています。PHPパラメータ化されたLIKE句を含むmysql文が同期外れのコマンドを返します

here,herehereのソリューションを実装しようとしました。これらのそれぞれは異なるエラーを投げているので、問題は私が紛失しているものにあるのではないかと心配しています。私は、実行関数で配列を使用しようとすると、私はコマンドを同期エラーから取得します。値やパラメータをバインドしようとすると、文字列エラーでバインドできなくなってしまいます。

私は紛失しています。

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

<? 
    $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

感謝を連結してwildcharを管理する最も簡単な方法を使用してのparamとして純粋なVARを割り当てることができます間違った方法でwildcharとのparamに文字列を渡します。私はこれを試して今取得しています: booleanのメンバー関数bind_param()を呼び出す – edumacator

+0

あなたはlastname列名を逃していました..先ほど..欠けているコードを追加してください..なぜdownvote ??? – scaisEdge

+0

Ok ...だから私はコードに間違いがあった。ちょうどそれを修正しましたが、今は結果が出ていますが、最初のキャラクターの結果しか得られません。 $ namePartが1文字の場合、その文字で上位20個の結果が得られます。 2番目の文字を入力するとエラーは出ませんが、結果は出ません。 – edumacator

関連する問題