0
私はPROCEDURE経由で存在するテーブルを更新しようとしています。しかし、私はエラーが発生します:MySQL:#1064 - あなたはあなたのSQL構文に誤りがあります。ライン1PROCEDUREのCONCAT()でのUPDATEの使用方法MySQL
私の手順で、近く '=のiOS、phone_manufacture
=アップル、phone_model
= iPhone、os_vers
= iOSのXX' を使用する権利構文についてはMySQLサーバのバージョンに対応するマニュアルを確認してください。
BEGIN
DECLARE a, b INT;
DECLARE a1, a2, a3, a4 TEXT;
DECLARE cur1 CURSOR FOR SELECT id FROM z7_group;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET b = 1;
OPEN cur1;
SET b = 0;
SET a1 = "iOS";
SET a2 = "Apple";
SET a3 = "iPhone";
SET a4 = "iOS X.X";
WHILE b = 0 DO
FETCH cur1 INTO a;
IF b = 0 THEN
SET @data_ all_group = (SELECT `myTables` FROM `all_group` WHERE id= a);
SET @s = CONCAT('UPDATE ', @data_ all_group, 'SET `os` = ',a1,', `phone_manufacture` = ',a2,', `phone_model` = ',a3', `os_vers` = ',a4,');
PREPARE stmt3 FROM @s;
EXECUTE stmt3;
END IF;
END WHILE;
CLOSE cur1;
END;
あなたがすることができます:クエリのビルドを修正しますyで使用されている場合は区切り記号として ';'を使用しませんストアドプロシージャ私はこれまでのところそれを解析して驚いています。 – tadman
もう1つ注目すべきことは、そこにエスケープすることなく任意のデータにジャムすることだけです。それはうまくいかないでしょう。 [プレースホルダ値](https://dev.mysql.com/doc/refman/5.7/en/sql-syntax-prepared-statements.html)を使用してください: 'SET os = ?, phone_manufacture =?、...'変数をバインドするために 'EXECUTE ... USING'を実行します。ここでは 'CONCAT'は完全に不要です。 – tadman
@tadmanしかし、代わりにALTER TABLEを使用すると、すべて正常に更新されます。 – Roman