Php 连接正忙,出现另一个hstmt错误的结果
我是新手。我的大部分查询都是用PHP编写的。我创建了一个连接对象,然后点击sql serverPhp 连接正忙,出现另一个hstmt错误的结果,php,sql,sql-server-2005,odbc,connection,Php,Sql,Sql Server 2005,Odbc,Connection,我是新手。我的大部分查询都是用PHP编写的。我创建了一个连接对象,然后点击sql server function navigation($sel_subject, $sel_page,$filter=false) { $subject_set = get_all_subjects(); $page_set = get_pages_for_subject($subject["id"],$sec_wp,$filter); } function get_all_subjects()
function navigation($sel_subject, $sel_page,$filter=false) {
$subject_set = get_all_subjects();
$page_set = get_pages_for_subject($subject["id"],$sec_wp,$filter);
}
function get_all_subjects() {
global $connection;
$query = " SELECT * FROM subjects ORDER BY position ";
return odbc_exec($connection,$query);
}
现在,我正在更新几个只需要从数据库中获取数据的简单查询。我正在将它们升级到存储过程
function get_all_subjects() { global $connection;
$query = " EXEC get_all_subjects ";
return odbc_exec($connection,$query); }
我收到一条错误消息。
连接正忙,出现另一个hstmt错误的结果
我正在使用SQLServer2005和ODBC连接器
解决这个问题的最好办法是什么。或者问管理员是否可以,这是一个更好的主意
做点像
奥塔·霍尔斯塔德说。。。
当使用BDE通过ODBC连接到MS SQL Server时,可以(有时?)通过使用SQL本机客户端而不是用于ODBC的SQL Server驱动程序来解决此问题
我想知道,它是更好地激活火星(多个活跃的结果集)。如果是这样,请帮助我提供一个逐步的过程来启用相同的功能。当您完成一个
odbc\u exec
的结果时,是否可以尝试添加odbc\u free\u result
调用?我建议使用其他框架,例如
- PDO
- ADOdB
使用odbc,如果在第一个结果集处于活动状态时需要另一个结果集,则可以创建多个连接句柄并使用不同的连接句柄。我认为潜在的解决方案有三个部分 首先是更好地优化SQL语句 尝试使用LIMIT语句,不要使用*并仅定义所需的字段。这两件事可以帮助减少SQL语句的内存负载 其次,尝试更好地优化您的数据库表结构(即:减少Keyname/索引值等)。如果您的数据库大小很大(比如50000行或更大),可以尝试切换到InnoDB以防止行锁定。您还可以尝试从辅助(temp)db表执行一些表复制和查询,以减少主db的负载。显然,在我们不知道您的DB模式的情况下,这只是我“抛出一个建议” 第三,除非你碰到一个超过一百万行的数据库,并且你遇到了一个连接繁忙的错误,否则你很有可能需要和你的主机提供商谈谈。即使在共享服务器中,这些类型的错误消息(如果您的代码尽可能优化)也几乎总是由于您的服务器没有分配足够的内存造成的 正如cyberkiwi所指出的,您可以尝试将ADOdb放入ftp并运行一个简单的循环,看看ADOdb的内部内存分配是否有帮助。上传ADOdb(包括ADOdb)并运行以下循环将非常简单:
$Data = $connection->Execute("SELECT field1, field2, field2 FROM subjects ORDER BY position ASC LIMIT 0, 10");
if (is_object($Data)&&(!$Data->EOF))
{
while (!$Data->EOF)
{
//
// string, array, echo, whatever here
//
$Data->MoveNext();
}
}
unset($Data);
最后,尽管这些类型的错误要么是由于编写糟糕的SQL语句导致多个连接暂停(在这种情况下,要求增加“最大并发连接”),要么是板载内存或php分配的内存不足(在这种情况下,要求增加“内存限制”).您必须启用默认禁用的MARS(多个活动结果集)。您可以通过切换到“SQL本机客户端”来避免此错误消息。有关更多信息感谢您的回复。odbc_free_result清除结果集。如果它是一个更新函数,则可以解决该问题。当我从中检索数据时,我需要调用第二个函数。我不能用这个:(我在这里写的代码是示例代码。所以我写了select*,而不是select独立字段。测试时表中的记录数只有10。所以我怀疑我们是否还需要限制数量。链接死了!