【发布时间】:2019-06-18 16:01:49
【问题描述】:
我有一个 PHP 脚本,它使用带有 WITH 子句的 SQLite 准备语句来打印从 2 到指定结尾的数字。当我运行它时,程序永远不会退出并输出 5 之后的数字(指定为参数)。当我运行结束固定(在 SQL 代码中为常量)而不是准备好的语句的类似程序时,它会输出预期的数字。
<?php
// Version with prepared statement
$db = new PDO("sqlite::memory:");
$s = $db->prepare("WITH RECURSIVE range(i) AS (
SELECT 2
UNION
SELECT i + 1 FROM range WHERE i < :to
) select * from range
");
$s->execute(array(":to" => 5));
foreach ($s as $value)
echo $value[0] . "\n";
<?php
// Version with constant -- working
$db = new PDO("sqlite::memory:");
$s = $db->prepare("WITH RECURSIVE range(i) AS (
SELECT 2
UNION
SELECT i + 1 FROM range WHERE i < 5
) select * from range
");
$s->execute(array());
foreach ($s as $value)
echo $value[0] . "\n";
【问题讨论】:
-
我认为 CTE 的递归部分是这里的罪魁祸首。不确定解决方法。
标签: sql sqlite pdo prepared-statement infinite-loop