0

我有一个带有渐进数字的表格(1、2、3、4、10、15 等......)

使用以下代码,所有这些数字都将正确打印出来。

$mysqli->select_db("db");

    $sql = $mysqli->prepare("SELECT `numbers` FROM `table`
    WHERE 1 LIMIT 0, 999999");

    $sql->execute();
    $sql->bind_result($pbx);

    while ($sql->fetch()){


        printf($pbx . "\n");
}

输出:1, 2, 3, 4, 10, 15, ecc...

不幸的是,我需要在这个 fetch 中执行一些其他的 mysqli 代码。这样做似乎会中断 fetch 本身,因为只有第一次迭代才能正常工作。

我在此处的 fetch 中发布了整个代码。如果您看到可能导致这种情况发生的事情,请告诉我。我已经注释掉了阻止获取的部分。

$mysqli->select_db("db");

    $sql = $mysqli->prepare("SELECT `numbers` FROM `table`
    WHERE 1 LIMIT 0, 999999");

    $sql->execute();
    $sql->bind_result($pbx);

    while ($sql->fetch()){


        printf($pbx . "\n");

        /* // COMMENT OUT FROM HERE, AND THE FETCH WILL STOP
        $sql->store_result();

        $mysqli->select_db("asterisk");
        $sql = $mysqli->prepare("INSERT INTO `devices` VALUES
        (?, 'sip', ?, 'fixed', ?, ?, NULL)"
        );


        $dial = "SIP/" . $pbx;

        $sql->bind_param('ssss', $pbx, $dial, $pbx, $pbx);

        $sql->execute();


        $sql = $mysqli->prepare("INSERT INTO `users` VALUES
        (?, NULL, ?, 'novm', 0, NULL, 'out=Adhoc|in=Adhoc', NULL, ?, 'default')
        ");

        $sql->bind_param('sss', $pbx, $pbx, $pbx);
        $sql->execute();

        $sql = $mysqli->prepare("INSERT INTO `sip`
            VALUES (
            ?, 'account', ?, 0
            ), (
            ?, 'secret', '123', 0
            ), (
            ?, 'qualify', 'yes', 0
            ), (
            ?, 'type', 'friend', 0
            ), (
            ?, 'context', 'hotel', 0
            ), (
            ?, 'host', 'dynamic', 0
            ), (
            ?, 'nat', 'yes', 0
            ), (
            ?, 'port', '5060', 0
            )
        ");

        $sql->bind_param('sssssssss', $pbx, $pbx, $pbx, $pbx, $pbx, $pbx, $pbx, $pbx, $pbx);
        $sql->execute();
        */ // COMMENT END

    }

输出:1

4

1 回答 1

1

您的循环变量正在循环内重新设置

while ($sql->fetch()){
    (...)
    $sql = $mysqli->prepare("INSERT INTO `devices` VALUES
        (?, 'sip', ?, 'fixed', ?, ?, NULL)"
        );

所以当它到达循环结束时,原来的内容$sql已经消失了。

您只需要重新命名任何一个变量,代码就可以工作了。

于 2013-05-27T13:07:37.370 回答