Skip to Content.
Sympa Menu

freetds - Re: [freetds] mssql_execute(): stored procedure execution failed

freetds AT lists.ibiblio.org

Subject: FreeTDS Development Group

List archive

Chronological Thread  
  • From: Sylvain Viart - Gmail <sylvain.viart AT gmail.com>
  • To: FreeTDS Development Group <freetds AT lists.ibiblio.org>
  • Subject: Re: [freetds] mssql_execute(): stored procedure execution failed
  • Date: Wed, 02 Jun 2010 12:06:32 +0200

Hi Robert,

On 28/05/2010 17:44, Robert Gonzalez wrote:
The fix is to free your result resources before sending another init request
to the server. I think you are running into something that has been causing
issues for a while, most recently in PDO as an unbuffered query error. What
is happening is the server is sending back a result but the response is
being held open on it until the next direct query is sent. But since you are
not sending a query and rather sending an init call the server is choking on
the request.

After every one of your queries and subsequent result reads, try adding in a
call to mssql_free_result($yourResultVar). That should make your problem go
away. At least it did for me in my testing just now
Yes, may be.
I'm gonna try that.

One try we made, which totaly crash the lib (may be somewhere in apache + persistent connection + freetds)

Was to replace the most failing mssql_init() call with a function wrapper :

here's the wrapper code

// $rt = call_proc("linsyn_mail_exclusion_get",
// "@id", $in,
// "@type", $tag_mail
// );
function call_proc($procname)
{
global $conn;
$sql = "EXEC $procname ";

// lecture des paramètres en paire
$n = func_num_args();
for($i = 1;$i < $n; $i += 2)
{
$param = func_get_arg($i);
$var = func_get_arg($i + 1);

// composition
$sql .= "$param = ";

if(is_int($var))
{
$sql .= $var;
}
else
{
$sql .= "'$var'";
}

if($i < $n - 2)
$sql .= ', ';
}

my_log("call_proc($sql)");
return mssql_query($sql, $conn);
}


This code (legacy):
$ps = mssql_init("linsyn_priv_get");
$result = mssql_execute($ps);
mssql_free_statement($ps);


became:

$result = call_proc("linsyn_priv_get");

It makes all mssql_init() failing, on all query and all pages on the web site, nothing works anymore.
I've to revert the code and restart apache to get it back.

hum...
If only I was able to get a valuable error log...

Regards,
Sylvain.





Archive powered by MHonArc 2.6.24.

Top of Page