以下是查询:
$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)
。
在查询中运行停用词之前,我不想过滤$value
停用词。
var_dump($stmt)
之后的 $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
有什么想法吗?
答案 0 :(得分:0)
使用此
if($stmt->rowCount() > 0) {
// do what you want here
}
以上陈述确保是否有数据,只有它会进入条件。
答案 1 :(得分:0)
你应该使用
if($res = $stmt->get_result()) {
//this means query returned some rows
}
else {
//and this means the result was empty
}
并且,是的,它确实需要使用mysqlnd(本机驱动程序)编译您的php,否则您将获得未声明的mysqli_stmt::get_result()
函数错误或类似的东西。
答案 2 :(得分: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
数组,我能够将停用词与数组分开。
如果您能够使用内置函数捕获停用词,请参阅。份额。
由于