PHP试图简化涉及行集的重复脚本
我试图简化我在PHP中所做的重复脚本。我已经研究了一些循环选项,但由于它涉及从MySQL存储过程返回的行集,因此无法正常运行。我用同样的脚本大约15次来返回所有数据。最终,我希望将json_编码数组传递回调用它的ajax。当我尝试将其放入循环时,得到的结果是一个500错误或一个构造糟糕的数组PHP试图简化涉及行集的重复脚本,php,mysql,pdo,Php,Mysql,Pdo,我试图简化我在PHP中所做的重复脚本。我已经研究了一些循环选项,但由于它涉及从MySQL存储过程返回的行集,因此无法正常运行。我用同样的脚本大约15次来返回所有数据。最终,我希望将json_编码数组传递回调用它的ajax。当我尝试将其放入循环时,得到的结果是一个500错误或一个构造糟糕的数组 $stmt->execute(); $values = array(); $stmt->execute(); $values = array();
$stmt->execute();
$values = array();
$stmt->execute();
$values = array();
$rowCount = $stmt->rowCount();
if ($rowCount > 0) {
$row = $stmt->fetchAll(PDO::FETCH_NUM);
$values = array();
foreach ($row as $rowvalue) {
$values[] = array($rowvalue[0], $rowvalue[1], $rowvalue[2], $rowvalue[3], $rowvalue[4], $rowvalue[5]);
}
$stmt -> nextRowset();
$row = $stmt->fetchAll();
foreach ($row as $rowvalue) {
$values[] = array($rowvalue[0], $rowvalue[1], $rowvalue[2], $rowvalue[3], $rowvalue[4], $rowvalue[5]);
}
$stmt -> nextRowset();
$row = $stmt->fetchAll();
foreach ($row as $rowvalue) {
$values[] = array($rowvalue[0], $rowvalue[1], $rowvalue[2], $rowvalue[3], $rowvalue[4], $rowvalue[5]);
}
...
echo json_encode($values);
}
已更新以使用以下代码示例:
$sql = 'CALL fo_SELECT_Operations_Detail(?,?,?)';
$facility = $_POST['facility'];
$startweek = $_POST['startweek'];
$endweek = $_POST['endweek'];
$sql->bindParam(1, $facility, PDO::PARAM_STR);
$sql->bindParam(2, $startweek, PDO::PARAM_STR);
$sql->bindParam(3, $endweek, PDO::PARAM_STR);
$stmt = $conn->query($sql);
$values = array();
do {
$rows = $stmt->fetchAll(PDO::FETCH_NUM);
foreach ($rows as $r) {
$values[] = array($r[0], $r[1], $r[2], $r[3], $r[4], $r[5]);
}
} while ($stmt->nextRowset());
// all processed so now send JSON
echo json_encode($values);
我们都忘记了,创建行集的SP也会创建一个恼人的空行集,它必须下一个被删除,但实际上并没有被卸载。
&&$stmt->columnCount()
负责调用nextRowset()
,但实际上并不试图以任何方式处理它
$sql = 'CALL fo_SELECT_Operations_Detail(?,?,?)';
$stmt->prepare($sql);
$stmt->bindParam(1, $_POST['facility'], PDO::PARAM_STR);
$stmt->bindParam(2, $_POST['startweek'], PDO::PARAM_STR);
$stmt->bindParam(3, $_POST['endweek'], PDO::PARAM_STR);
$stmt = $conn->execute();
$values = array();
do {
$rows = $stmt->fetchAll(PDO::FETCH_NUM);
foreach ($rows as $r) {
$values[] = [$r[0], $r[1], $r[2], $r[3], $r[4], $r[5]];
}
} while ($stmt->nextRowset() && $stmt->columnCount());
// all processed so now send JSON
echo json_encode($values);
是的,它确实工作得很好,直到您尝试将其放入json_编码并传回ajax,然后它就失败了。好吧,那么如果错误日志中或500错误行附近有任何消息,存储过程就会按预期工作。它返回结果,我可以单独移动到每一行集合,而不会出现问题。只是当它被放入一个循环时,它就崩溃了。对不起,我想说的是我发布的原始脚本。然而,为了成功地获得所有结果,我必须调用一个行集,遍历它,退出该部分,调用下一个行集,遍历它,等等。这意味着我将重复代码15次以上。当我打同样的电话,但使用你的例子,它没有执行。不过,存储过程正在正确返回。现在正在处理错误代码,不幸的是在cpanel中编辑,无法轻松访问ini文件,因此试图找出如何回显错误。应该有一个PHP错误日志,有时它与Apache错误日志合并。谢谢,这会导致500个错误。我更新了上面的示例以合并您的示例。