PHP MySQLi准备语句fetch - 第一行空?

时间:2015-08-12 18:47:14

标签: php mysql mysqli prepared-statement

以下代码:

        $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个结果行?

有什么想法吗?

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);

- 如果你对空结果的假设是对还是错,这段代码会毫不含糊地告诉你。

了解之后,您可以开始调试,在您自己的代码中找到一个负责当前行为的地点。

希望它有所帮助。