0

クエリは次のとおりです。

$stmt = $dbconnect->prepare("SELECT `title`,`description`,`postid` FROM `posttd` WHERE MATCH `title` AGAINST ( ? IN BOOLEAN MODE)");
$stmt->bind_param('s', $value);
$stmt->execute();

の値$valueは「test1」、「other」、および「test2」です

値「other」は mysql ストップワードです。そのため、クエリを介して渡されると、何も返されません。

$value配列から取り出すことができるようにキャッチする方法を知りたいだけです。

var_dump($stmt->execute());bool(true)3つすべてを与えます。

$value可能な限り、クエリで実行する前に for ストップワードをフィルター処理したくありません。

var_dump($stmt)after$stmt->execute();は次のようになります。

test1 var_dump

object(mysqli_stmt)#2 (9) { ["affected_rows"]=> int(-1) ["insert_id"]=> int(0) ["num_rows"]=> int(0) ["param_count"]=> int(1) ["field_count"]=> int(3) ["errno"]=> int(0) ["error"]=> string(0) "" ["sqlstate"]=> string(5) "00000" ["id"]=> int(1) } 

test2 var_dump

object(mysqli_stmt)#2 (9) { ["affected_rows"]=> int(-1) ["insert_id"]=> int(0) ["num_rows"]=> int(0) ["param_count"]=> int(1) ["field_count"]=> int(3) ["errno"]=> int(0) ["error"]=> string(0) "" ["sqlstate"]=> string(5) "00000" ["id"]=> int(3) } 

その他の var_dump

object(mysqli_stmt)#6 (9) { ["affected_rows"]=> int(-1) ["insert_id"]=> int(0) ["num_rows"]=> int(0) ["param_count"]=> int(1) ["field_count"]=> int(3) ["errno"]=> int(0) ["error"]=> string(0) "" ["sqlstate"]=> string(5) "00000" ["id"]=> int(2) } 

唯一の違いはobject(mysqli_stmt)#6

何か案は?

4

3 に答える 3

0

これを使って

 if($stmt->rowCount() > 0) {
   // do what you want here
}

上記のステートメントは、データがあるかどうかを確認し、それのみが条件内に入るようにします。

于 2013-04-29T11:29:12.977 に答える
0

そのため、組み込み関数を使用してキャッチすることはできません。代わりに、空の結果をキャッチする簡単なテストを作成しました。ここにあります:

$bindarray = array('+test1','+other','+test2');
foreach($bindarray as $key=>$value)
{
echo $value; // NOTE1: This echo prints +test1, +other, and +test2
$stmt = $dbconnect->prepare("SELECT `title`,`description`,`postid` FROM `posttd` WHERE MATCH `title` AGAINST ( ? IN BOOLEAN MODE)");
$stmt->bind_param('s', $value);
echo 'Bind:'.$value; // NOTE2: This echo prints +test1, +other, and +test2
$stmt->execute();
echo 'Execute:'.$value; // NOTE3: This echo prints +test1, +other, and +test2
$stmt->bind_result($rtitle,$rdescription,$rpostid);
    while($stmt->fetch())
    {
        echo 'Fetch:'.$value; // NOTE4: This echo prints +test1 and +test2 ONLY
        if(!empty($value))
        {
            if(!in_array($value, $goodvalues))
            {
                array_push($goodvalues,$value);
            }
        }
    }
}

ご覧のとおり、 NOTE4 $valueは何もフェッチしなかっ$stmt->fetch()たため ( )、while ループを通過しなかったため、$goodvalues配列に含まれず、配列からストップワードを分離できました。

組み込み関数を使用してストップワードをキャッチできる場合は、pls. シェア。

ありがとう

于 2013-04-30T04:46:54.617 に答える