【发布时间】:2009-04-21 19:22:56
【问题描述】:
给定以下代码:
// Connect to MySQL up here
$example_query = $database->prepare('SELECT * FROM table2');
if ($example_query === false) die('prepare failed');
$query = $database->prepare('SELECT * FROM table1');
$query->execute();
while ($results = $query->fetch())
{
$example_query = $database->prepare('SELECT * FROM table2');
if ($example_query === false) die('prepare failed'); //it will die here
}
我显然尝试准备语句以从 table2 中选择所有内容两次。第二个(WHILE 循环中的那个)总是失败并导致错误。
这只是在我的生产服务器上,在本地开发我没有问题,所以它一定是某个地方的某种设置。
我的直接想法是 MySQL 将某种 max_connections 设置设置为 1,并且连接保持打开状态,直到 WHILE 循环完成,所以当我尝试准备一个新查询时,它说“没有太多已连接”和大便。
有什么想法吗?
编辑:是的,我知道没有必要做两次,在我的实际代码中,它只在 WHILE 循环中准备好,但就像我说的那样,在我的生产服务器上失败了,所以经过一些测试我发现一个简单的 SELECT * 查询在 WHILE 循环中失败,但没有退出。我给出的示例代码显然被淡化了,只是为了说明问题。
【问题讨论】:
-
我不明白你在说什么。如果您在循环中使用 prepare() ,那么您做错了。循环外准备,内执行。