1
phpとmysqlでパラメータ化されたクエリでLIKE句を使用しようとしています。私が試してみるたびに、私は別のエラーを得ています。PHPパラメータ化されたLIKE句を含むmysql文が同期外れのコマンドを返します
here,here、hereのソリューションを実装しようとしました。これらのそれぞれは異なるエラーを投げているので、問題は私が紛失しているものにあるのではないかと心配しています。私は、実行関数で配列を使用しようとすると、私はコマンドを同期エラーから取得します。値やパラメータをバインドしようとすると、文字列エラーでバインドできなくなってしまいます。
私は紛失しています。
ありがとうございました!
<?
$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
}
}
?>
感謝を連結してwildcharを管理する最も簡単な方法を使用してのparamとして純粋なVARを割り当てることができます間違った方法でwildcharとのparamに文字列を渡します。私はこれを試して今取得しています: booleanのメンバー関数bind_param()を呼び出す – edumacator
あなたはlastname列名を逃していました..先ほど..欠けているコードを追加してください..なぜdownvote ??? – scaisEdge
Ok ...だから私はコードに間違いがあった。ちょうどそれを修正しましたが、今は結果が出ていますが、最初のキャラクターの結果しか得られません。 $ namePartが1文字の場合、その文字で上位20個の結果が得られます。 2番目の文字を入力するとエラーは出ませんが、結果は出ません。 – edumacator