Can mysqli_multi_query do UPDATE statements?

杀马特。学长 韩版系。学妹 提交于 2019-12-25 02:28:59

问题


I tried to do multiple updates with mysqli_multi_query(), but it doesn’t work.

$arr_updates[] = "UPDATE MYTABLE SET COLUMN = 'VALUE' WHERE ID = 1";
$arr_updates[] = "UPDATE MYTABLE SET COLUMN = 'VALUE' WHERE ID = 2";

$b = mysqli_multi_query($CONN,join("; ",$arr_updates));

$b is FALSE, even though the syntax of the SQL statements is correct.

Is mysqli_multi_query() supposed to work with MySQL UPDATE statements? Or is there any way I could optimize my update statement? (I can’t use a switch statement.)

These are the generated queries:

UPDATE cj_term_taxonomy SET parent = 0 WHERE parent = 120;
UPDATE cj_term_taxonomy SET parent = 1 WHERE parent = 121;
UPDATE cj_term_taxonomy SET parent = 2 WHERE parent = 122;
UPDATE cj_term_taxonomy SET parent = 3 WHERE parent = 123;
UPDATE cj_term_taxonomy SET parent = 4 WHERE parent = 124;
UPDATE cj_term_taxonomy SET parent = 5 WHERE parent = 125;
UPDATE cj_term_taxonomy SET parent = 6 WHERE parent = 126;
UPDATE cj_term_taxonomy SET parent = 7 WHERE parent = 127;
UPDATE cj_term_taxonomy SET parent = 8 WHERE parent = 130;
UPDATE cj_term_taxonomy SET parent = 9 WHERE parent = 131;
UPDATE cj_term_taxonomy SET parent = 10 WHERE parent = 132;
UPDATE cj_term_taxonomy SET parent = 11 WHERE parent = 133;
UPDATE cj_term_taxonomy SET parent = 12 WHERE parent = 134;
UPDATE cj_term_taxonomy SET parent = 13 WHERE parent = 135;
UPDATE cj_term_taxonomy SET parent = 14 WHERE parent = 136;
UPDATE cj_term_taxonomy SET parent = 15 WHERE parent = 137;
UPDATE cj_term_taxonomy SET parent = 16 WHERE parent = 138; 
UPDATE cj_term_taxonomy SET parent = 17 WHERE parent = 139;
UPDATE cj_term_taxonomy SET parent = 18 WHERE parent = 140;
UPDATE cj_term_taxonomy SET parent = 19 WHERE parent = 141;
UPDATE cj_term_taxonomy SET parent = 20 WHERE parent = 142;
UPDATE cj_term_taxonomy SET parent = 21 WHERE parent = 143;
UPDATE cj_term_taxonomy SET parent = 22 WHERE parent = 144;
UPDATE cj_term_taxonomy SET parent = 23 WHERE parent = 145;
UPDATE cj_term_taxonomy SET parent = 24 WHERE parent = 146;
UPDATE cj_term_taxonomy SET parent = 25 WHERE parent = 147;
UPDATE cj_term_taxonomy SET parent = 26 WHERE parent = 148;
UPDATE cj_term_taxonomy SET parent = 27 WHERE parent = 149;
UPDATE cj_term_taxonomy SET parent = 28 WHERE parent = 150;
UPDATE cj_term_taxonomy SET parent = 29 WHERE parent = 151;
UPDATE cj_term_taxonomy SET parent = 30 WHERE parent = 152;
UPDATE cj_term_taxonomy SET parent = 31 WHERE parent = 153;
UPDATE cj_term_taxonomy SET parent = 32 WHERE parent = 154;
UPDATE cj_term_taxonomy SET parent = 33 WHERE parent = 155;
UPDATE cj_term_taxonomy SET parent = 34 WHERE parent = 156;
UPDATE cj_term_taxonomy SET parent = 35 WHERE parent = 157;
UPDATE cj_term_taxonomy SET parent = 36 WHERE parent = 158;
UPDATE cj_term_taxonomy SET parent = 37 WHERE parent = 182;
UPDATE cj_term_taxonomy SET parent = 38 WHERE parent = 181;
UPDATE cj_term_taxonomy SET parent = 39 WHERE parent = 178;
UPDATE cj_term_taxonomy SET parent = 40 WHERE parent = 179;
UPDATE cj_term_taxonomy SET parent = 41 WHERE parent = 180;
UPDATE cj_term_taxonomy SET parent = 42 WHERE parent = 201;

回答1:


@ Sebastien, [cringe]... you are opening and closing the mysqli connection between each UPDATE query?!? I'm pretty sure that that is not best practice.

I have a solution elsewhere that may help you. It uses mysqli_multi_query() when all query statements return true/false (no result set). Remove mysqli_affected_rows() and mysqli_error() if you don't want to use them. Let me know if this helps.

Strict Standards: mysqli_next_result() error with mysqli_multi_query




回答2:


I found the solution,

I had an mysql error "commands out of sync you can't run this command now". Before and after each mysqli_multi_query, i close mysqli connection and i start new one. This solution work for me.



来源:https://stackoverflow.com/questions/21047348/can-mysqli-multi-query-do-update-statements

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!