数据库错误:命令不同步

时间:2014-11-29 作者:hrace009

我使用下面的代码创建函数:

function my_add_new_id ( ) {
...
$GetSvrPass = $my_db_connect->get_var ( $my_db_connect->prepare ( \'CALL my_acquireuserpasswd ( %s, @ID, @PASS ) ;\', $mylogin ) );
$GetPassVarHex = $GetSvrPass;
if ( ( $garamold !== $GetPassVarHex ) || ( $twpinold !== $GetPin ) ) {
$my_add_id_message .= \'<div class="my-alert-box myerror"><span>FAILED:</span> Old Password and Old Pin not match</div>\';
}
else {      
     $my_db_connect->query ( $my_db_connect->prepare ( \'CALL my_add_other_id ( %s, \'.$garam.\', %s, %s, %s, %s, %s, %s, %d, %d ) ; \', $mylogin, $cPanel, $mypass, $my_wpname, $USER_IP, $my_wpemail, $mypin, $my_wpid, $my_svr_region ) );
     $my_add_id_message .= \'<div class="my-alert-box mysuccess"><span>SUCCESS:</span> New ID has been added to your account! </div>\';
     }
echo $my_add_id_message;
}
mysql程序和函数如下:

    MYSQL PROCEDURE: my_acquireuserpasswd
    =======================================
    BEGIN
      DECLARE passwdtemp VARCHAR(64);
      START TRANSACTION;
        SELECT id, passwd INTO uid1, passwdtemp FROM users WHERE name = name1;
        SELECT fn_varbintohexsubstring(1,passwdtemp,1,0) ;
      COMMIT;
    END
    ================================================================
    PARAMETER: in name1 VARCHAR(64), out uid1 INTEGER, out passwd1 VARCHAR(64)
    ================================================================
每次我执行这个函数

WordPress数据库错误:[命令不同步;您现在无法运行此命令]

当我在窗体上执行函数时,这些错误总是出现。它给

WordPress数据库错误:[命令不同步;您现在无法运行此命令]

在…上CALL my_add_other_id

我已经重新检查了那些程序,没有问题。但消息总是说不能运行my_add_other_id

我想问题出在

$GetSvrPass = $my_db_connect->get_var ( $my_db_connect->prepare ( \'CALL my_acquireuserpasswd ( %s, @ID, @PASS ) ;\', $mylogin ) );
it调用过程的位置my_acquireuserpasswd 在该程序中,它将选择功能fn_varbintohexsubstring 这似乎是函数的问题。但我不知道问题出在哪里,因为我尝试在没有wordpress的情况下运行它,它可以运行而不会出现任何错误。

有什么建议吗?

1 个回复
最合适的回答,由SO网友:IlmarsL 整理而成

这似乎是“孤立SELECT语句”的问题。对其进行了描述 here 更详细。

一种解决方案是创建一个临时表并修改my_acquireuserpasswd 将数据保存到temp_table

BEGIN
  DECLARE passwdtemp VARCHAR(64);
  DECLARE temp VARCHAR(4000);
  START TRANSACTION;
    SELECT id, passwd INTO uid1, passwdtemp FROM users WHERE name = name1;
    SET temp = fn_varbintohexsubstring(1,passwdtemp,1,0) ;
    INSERT INTO temp_table (pstrout) VALUES (temp); 
  COMMIT;
END
假设$my\\u db\\u connect是$wpdb object,您可以使用以下方法在php函数中检索数据:

     $GetSvrPass = $my_db_connect->get_var ( \'SELECT * FROM temp_table\' );
     $my_db_connect->query ( \'DELETE FROM temp_table\' );
在每次函数调用时从temp\\u表中删除值当然是可选的,您可以简单地添加ID或实现其他一些解决方案。

结束

相关推荐

WP_USE_EXT_MYSQL

下面是源代码中wpdb类的构造函数。根据谷歌搜索,这一名称最近已从USE\\u EXT\\u MYSQL重命名。然而,我在源代码中找不到任何定义了常量的地方。function __construct( $dbuser, $dbpassword, $dbname, $dbhost ) { register_shutdown_function( array( $this, \'__destruct\' ) ); if ( WP_DEBUG && WP_