Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/266.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php MySqli循环存储结果_Php_Mysql_Mysqli - Fatal编程技术网

Php MySqli循环存储结果

Php MySqli循环存储结果,php,mysql,mysqli,Php,Mysql,Mysqli,我查看了MySqli中准备好的语句,从过滤的角度来看,personID必须是数字的。但是,当我使用store_结果循环记录时,过滤似乎停止了。例如: $personID = 4; if ($stmt = $mysqli->prepare("SELECT personName FROM people WHERE personID>?")) { $stmt->bind_param("s",$personID); $stmt->execute(); $stmt->stor

我查看了MySqli中准备好的语句,从过滤的角度来看,personID必须是数字的。但是,当我使用store_结果循环记录时,过滤似乎停止了。例如:

$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();
}
它返回所有记录,即停止类型检查并返回所有记录。那么如何维护过滤呢


感谢

这可能是因为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)

谢谢,迈克尔,这很有道理,但我必须对所有参数进行类型检查吗?我尝试了$stmt->bind_parami,$personID;但是php\mysqli仍然尝试解析具有相同结果的int。再次感谢。@user1002120绑定参数将只确保进入数据库的是它所期望的类型。如果类型不正确,它不会中止-这仍然是应用程序的责任。
mysql> SELECT CAST('bbbcc' AS UNSIGNED);
+---------------------------+
| CAST('bbbcc' AS UNSIGNED) |
+---------------------------+
|                         0 | 
+---------------------------+
1 row in set, 1 warning (0.00 sec)