我有一张包含渐进数字的表格(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中发布了整个代码。如果你看到可能导致这种情况发生的事情,请告诉我。我已经注释掉阻止获取的部分。
$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
答案 0 :(得分:1)
您的循环变量正在循环中重新设置
while ($sql->fetch()){
(...)
$sql = $mysqli->prepare("INSERT INTO `devices` VALUES
(?, 'sip', ?, 'fixed', ?, ?, NULL)"
);
所以当它到达循环结束时,$sql
的原始内容已经消失。
你只需重新命名变量,代码就可以了。