我使用下面的代码创建函数:
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的情况下运行它,它可以运行而不会出现任何错误。
有什么建议吗?
最合适的回答,由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或实现其他一些解决方案。