以下代码:
$con = ConnectDB::getConnection();
if ($stmt = $con->prepare('---SQL here with 1 param---')) {
$stmt->bind_param('i', $this->id);
$stmt->execute();
$stmt->bind_result($device_id, $device_identifier);
while ($stmt->fetch()) {
$device = new Device($device_identifier, $device_id);
$all_devices[] = $device;
}
获取空结果?第一次循环时,$ device_id和$ device_identifier为空,但fetch()方法返回true,因此它运行。但是 - 第二次迭代实际上包含了我的结果。
我可以简单地检查它们是否为空并忽略它们,但我真的不明白为什么它会返回一个空对?我尝试直接在DB上运行SQL,它只返回1个结果行?
有什么想法吗?
答案 0 :(得分:0)
正如您可能想象的那样,MySQLi预处理语句fetch不会返回空的第一行。因为这样的行为会有一点意义。
您需要学习为断言创建正确的证明 您发布的代码不正确。出于某种原因,你试图通过间接后果来判断问题。 为什么不检查此事呢?
$con = ConnectDB::getConnection();
if ($stmt = $con->prepare('---SQL here with 1 param---')) {
$stmt->bind_param('i', $this->id);
$stmt->execute();
$stmt->bind_result($device_id, $device_identifier);
$stmt->fetch();
var_dump($device_identifier, $device_id);
- 如果你对空结果的假设是对还是错,这段代码会毫不含糊地告诉你。
了解之后,您可以开始调试,在您自己的代码中找到一个负责当前行为的地点。
希望它有所帮助。