我在我构建的数百个页面上使用以下(或类似)代码:
$stmt = $db->prepare("SELECT * FROM table");
$stmt->execute();
while($row = $stmt->fetch()) {
$id = $row['id'];
$name = $row['name'];
do something with data returned...
$id = NULL;
$name = NULL;
}
Run Code Online (Sandbox Code Playgroud)
从现在开始,我开始在几页上收到以下错误:
致命错误:未捕获异常'PDOException',消息'SQLSTATE [HY000]:C:.... page.php中的常规错误:28堆栈跟踪:#0 C:.. page.php(28):PDOStatement-> fetch()#1 {main}抛出
第一个循环将运行(没有问题)但在第一个循环之后给出错误.错误代码(第28行)引用该行:
while($row = $stmt->fetch()) {
Run Code Online (Sandbox Code Playgroud)
我以前从未见过这个.作为测试,我修改了代码以将所有返回的结果存储为:
$stmt = $db->prepare("SELECT * FROM table");
$stmt->execute();
$rows = $stmt->fetchALL();
foreach($rows as $row) {
$id = $row['id'];
$name = $row['name'];
do something with data returned...
$id = NULL;
$name = NULL;
}
Run Code Online (Sandbox Code Playgroud)
而且系统有效.知道为什么?
注意:在再次查看"do something"区域后 - 我意识到数据库初始化程序($ sql)在select和一个insert/update语句中是相同的.将这些更改为唯一值可以纠正此问题.
谢谢