Php MySqli循环存储结果
我查看了MySqli中准备好的语句,从过滤的角度来看,personID必须是数字的。但是,当我使用store_结果循环记录时,过滤似乎停止了。例如: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
$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)