`

Error: Commands out of sync; you can't run this command now

    博客分类:
  • PHP
阅读更多

Q:

i m getting this bug.. and i still cant understand why this happening..??

here is my php code

<?php
$query1 = "call new_user('$cardDigits','$cardNo','$amount','$traiff','','','','','$creator',@_lastname,'$customer','$firstName','$email','0','0')";

$result1 = mysql_query($query1) or die('query_error'.''.mysql_error());

$lastname = mysql_fetch_row($result1);

// Generate New User

$query2 = "genrate_user('$lastname[0] ','$creator')";

echo $query2; 

$result2 = mysql_query($query2) or die('query_error1'.''.mysql_error());
 Procedures are working fine..!!! 

1st Procedure generate the $lastname
which is the input parameter of second Procedure..!!!!!

when i print or echo the 2nd procedure.. its run fine at mysql.. but through php its throughing error Commands out of sync; you can't run this command now

Help me guys..!!!

 

 

Posts:

1.

Hey.

The old MySQL extension was never built to run procedures, even tho it *can* be used to do so. You should be using the Improved MySQL extension if you are planing to use features like Stored Procedures.

The problem you are facing, "Commands out of sync", is caused by unused result sets left over by your procedure. When you call your first procedure, the result sets are buffered until you use them. However, you only use one set, and you didn't even free it before moving on to the second query. You need to free the buffered result sets before moving on:

It is best to create a function, or a method, to do this. No need to repeat the code over and over.
For example:

 <?php

/**
* Calls a Stored Procedure and returns the results as an array of  rows.
* @param mysqli $dbLink An open mysqli object.
* @param string $procName The name of the procedure to call.
* @param string $params The parameter string to be used
* @return array An array of rows returned by the call.
*/
function c_mysqli_call(mysqli $dbLink, $procName, $params="")
{
  if(!$dbLink) {
        throw new Exception("The MySQLi connection is invalid.");
  }
  else
 {
        // Execute the SQL command.
       // The multy_query method is used here to get the buffered results,
     // so they can be freeded later to avoid the out of sync error.
      $sql = "CALL {$procName}({$params});";
      $sqlSuccess = $dbLink->multi_query($sql);

      if($sqlSuccess)
     {
         if($dbLink->more_results())
        {
              // Get the first buffered result set, the one with our data.
                $result = $dbLink->use_result();
                $output = array();

                // Put the rows into the outpu array
                while($row = $result->fetch_assoc())
                {
                    $output[] = $row;
                }
 
               // Free the first result set.
               // If you forget this one, you will get the "out of sync" error.
                $result->free();

                // Go through each remaining buffered result and free them as well.
                // This removes all extra result sets returned, clearing the way
               // for the next SQL command.
               while($dbLink->more_results() && $dbLink->next_result())
                {
                    $extraResult = $dbLink->use_result();
                    if($extraResult instanceof mysqli_result){
                        $extraResult->free();
                    }
               }
 
                return $output;
            }
            else
            {
                return false;
            }
        }
        else
        {
            throw new Exception("The call failed: " . $dbLink->error);
        }
    }
}
?>

 Which you could use like:

<?php
header('content-type: text/plain');
 
$dbLink = new mysqli('localhost', 'usr', 'pwd', 'dbname');
 
// Execute the first call
echo "\n--- FIRST CALL ---\n";
$result = c_mysqli_call($dbLink, 'TestProc', "2, 'second param'");
if($result) {
    echo "Output: \n";
    foreach($result as $_row) {
        echo " " . $_row['something'] . "\n";
    }
}
 
// Execute the second call
echo "\n--- SECOND CALL ---\n";
$result = c_mysqli_call($dbLink, 'TestProc', "3, 'second param'");
if($result) {
    echo "Output: \n";
    foreach($result as $_row) {
        echo " " . $_row['something'] . "\n";
    }
}
?>

 Hope that helps.

 

 

Q:

If it only matters to free the buffered result set..!!!!

Can i use mysql_free_result() or is there any other way to do this thing without using mysqli..??? 

2:
As far as I know, there is no way for the old MySQL extension to execute multiple procedures. Not without using multiple connections, which is a horrific idea.
You would have to be able to fetch multiple result sets, and I don't see a way to do that with the mysql_ functions. It would need to implement the mysql_next_result() function of the MySQL API.

Like I say, the mysql extension was not built to be used with procedures. It was built for MySQL 3, but stored procedures weren't introduced until MySQL 5. The Improved MySQL extension was created to address these sort of incompatibilities.

Any specific reason you do not want to switch over?

Q:
i dont want to switch to mysqli because it is most creepiest thing in php according to me..!!! i wasted hours to install it.. but was unable to that..!!!

i uncommented the extension=php_mysqli.dll in php.ini

also check mysqli dll files in ext folder..

but still i m unable to install mysqli...

every time i got this error Class 'mysqli' not found

3:
Well, I don't know about XAMPP as such, but the process of installing PHP extensions is fairly simple:
  1. Put the DLL into the ext/ directory.
  2. Add/Uncomment the "extension=xxx.dll" line in the config.
  3. Restart Apache.
  4. ... and your done.

If that fails, the most common causes are:
  • You are editing the incorrect php.ini file.
  • Windows can not find the ext/ directory. Or, more accurately, it doesn't know it is supposed to look in the PHP directory.
  • Prerequisites for the extension are missing. (Shouldn't be the case for you, seeing as the other MySQL extension is working.)
  • You are using Windows! (Joking... kind of ;-)
For the first two, the solution is usually to put the PHP directory into the PATH variable.


 Q:
That's odd... I just installed XAMPP 1.7.2 on my Windows test box and the mysqli extension was enabled by default.

4:
Yeah it is default uncommented
stupid of me..!! actually i m using Nusphere at my php IDE..!!!
i dont know tht Nushpere also have php.ini.. in it is commented mysqli.dll

i un comment that and now its working..!!

i have a question regarding mysqli...!!!
if i made my config file in mysql...!! than can i use mysqli functions..!!!
i mean is it necessary to make connection with mysqli extension to use mysqli function..!!!


Q:
Yuppy..!!! i got the output finally..!!!

thanks to u bro..!!!

but in coding i made two config file.. one with mysql other with msqli..!!!
<?php
$query1 = "call new_user('$cardDigits','$cardNo','$amount','$traiff','','','','','$creator',@_lastname,'$customer','$firstName','$email','0','0')";
$result1 = mysqli_query(,$mysqli,$query1) // here i made change
$lastname = mysqli_fetch_row($result1); // here i made change
 
// Generate New User
$query2 = "genrate_user('$lastname[0] ','$creator')";
echo $query2; 
$result2 = mysql_query($query2) or die('query_error1'.''.mysql_error());
 thats it..!! 
i know its a bad pratice..!! but i will improve it..!!
can u give link to basic tutorial of mysqli..?

i will appreciate that.!!
 
 

 

<!-- google_ad_section_end -->
分享到:
评论

相关推荐

    MysqlError Commands out of sync; you can&#039;t run this command now SHOW TABLES解决方案.docx

    。。。

    Python django使用多进程连接mysql错误的解决方法

    问题 mysql 查询出现错误 ... you can’t run this command now in your client code, you are calling client functions in the wrong order.  This can happen, for example, if you are using mysql

    leetcode答案-goStudy:去学习

    遇上错误「Error: Commands out of sync. Did you run multiple statements at once?」 原来是必须取得result,并执行result.Close()。原理是什么? 2020.10.26 照着的套路,用Go+Gin 把后台的部分重写了一遍,搞了...

    django 连接数据库出现1045错误的解决方式

    根据菜鸟教程Django教程学习,运行”python manage.py migrate” 报错,出现 django.db.utils.OperationalError: (1045, “Access denied for user ‘账号’@’localhost’ (using password: YES)”) ...

    MySQL 一次执行多条语句的实现及常见问题

    MySQL是支持在单个查询字符串中指定多语句执行的,使用方法是给链接指定参数: 代码如下: //链接时设定 mysql_real_connect( …, CLIENT_MULTI_STATEMENTS ... you can’t run this command now 官方推荐的执行语句是这

    Sybase Reference Manual:commands

    Sybase数据库命令集参考手册: Sybase Reference Manual:commands.pdf

    TPM-Rev-2.0-Part-3-Commands-01.38.pdf

    Trusted Platform Module Library Part 3: Commands This TPM 2.0 Part 3 of the Trusted Platform Module Library specification contains the definitions of the TPM commands. These commands make use of the ...

    pycharm中导入模块错误时提示Try to run this command from the system terminal

    pycharm中导入模块错误时,提示:Try to run this command from the system terminal. Make sure that you use the correct version of ‘pip’ installed for your Python interpreter located atpycharm工作路径。...

    PHP and MySQL Web Devepopment 4th Edition.pdf

    By simply entering the DCDIAG command does get the job done, but this would not be much of an article if I just told you to run the command, and left it at that. There is a lot more to the Domain ...

    CE中文版-启点CE过NP中文.exe

    November 13 2017:Can't run Cheat Engine There is apparently some malware going around that blocks execution of Cheat Engine (Saying file missing, check filename, etc...) If you have been a victim of ...

    Advanced Apple Debugging & Reverse Engineering v0.9.5

    The LLDB command command regex acts much like command alias, except you can provide a regular expression for input which will be parsed and applied to the action part of the command. 10. Assembly ...

    linux bash手册(英文,version 4.2)

    Shell Builtin Commands:: Commands that are a part of the shell. Shell Variables:: Variables used or set by Bash. Bash Features:: Features found only in Bash. Job Control:: What job control is and how...

    C 语言编缉神经网络工具

    run even if you don't have a co-processor. If you have a coprocessor and want batchnet to run faster, which may be especially important in training, you can recompile batchnet.c using the 80x87 ...

    ANSYS Mechanical APDL Command Reference.pdf

    Welcome to the Command Reference.This reference contains a complete dictionary of detailed command descriptions, arranged in alphabetical order. It is the definitive resource for correct command ...

    lucene lsql

    It can be run in interactive mode, or can automatically parse a list of commands from a file. Example LSql queries are: SELECT field1,field2 WHERE +field1:value This command will display two ...

    Windows Server 2008 Portable Command Guide_ MCTS 70-640, 70-642, 70-643

    I started the outline of this book by ensuring that command prompt commands covered by the Microsoft Certified Information Technology Professional (MCITP) certifications on Windows Server 2008 were...

    Command Line Fundamentals

    By the end of this book, you’ll have explored the basics of shell scripting, allowing you to easily and quickly automate tasks. Contents What You Will Learn Use the Bash shell to run commands Utilize...

    PowerCommands for Visual Studio 2008

    This feature allows you to select which commands to enable in the Visual Studio IDE. Point to the Tools menu, then click Options. Expand the PowerCommands options, then click Commands. Check the ...

    EurekaLog_7.5.0.0_Enterprise

    7)....Added: Streaming unpacked debug info into temporal files instead of memory - this greatly reduces run-time application memory usage at cost of slightly slower exception processing. This also ...

    BURNINTEST--硬件检测工具

    - Corrected a problem where the loopback sound test could run out of memory if run for several days. Release 5.3 build 1013 WIN32 release 31 December 2007 - Improved the reporting of ...

Global site tag (gtag.js) - Google Analytics