MySqli循环存储结果

时间:2011-10-18 22:51:44

标签: php mysql mysqli

我查看了MySqli中的预处理语句,从过滤的角度来看一切正常(personID必须是数字)。但是,当我使用store_result(循环记录)时,过滤似乎停止了。例如:

$personID = 4;
if ($stmt = $mysqli->prepare("SELECT personName FROM people WHERE personID>?")) {
$stmt->bind_param("s",$personID);
$stmt->execute();
$stmt->store_result();
$stmt->bind_result($personName);

//$stmt->fetch();
//$stmt->fetch_row();
  while($stmt->fetch()){
      echo $personName."<br /><br />";
  }
  $stmt->close();
}

工作正常,但如果我设置:

$personID = 'bbccc';

它会带回所有记录,也就是说,它会停止类型检查并带回所有记录。那么如何维护过滤?

由于

1 个答案:

答案 0 :(得分:0)

这很可能是因为MySQL将字符串bbccc转换为整数,结果为0.然后,您实际上选择personId > 0的所有记录,这可能是全部或全部但是你的一行。

如果$personID是一个整数值,你应该这样绑定它,而不是一个字符串:

$stmt->bind_param("i", $personID);

要查看此行为,请执行以下查询:

mysql> SELECT CAST('bbbcc' AS UNSIGNED);
+---------------------------+
| CAST('bbbcc' AS UNSIGNED) |
+---------------------------+
|                         0 | 
+---------------------------+
1 row in set, 1 warning (0.00 sec)