Php SQL查询中的错误

Php SQL查询中的错误,php,mysql,Php,Mysql,我有一个应该向表中添加随机数据的查询,但它不起作用 我的查询如下所示: DECLARE @i INT; SET @i = 0; WHILE (@i < 25000) DO BEGIN INSERT INTO ak_class (class_name, class_description) VALUES (CONCAT('Rose', RAND()*250000), CONCAT('Roses are awesome', RAND()*250000)); SET @i = @i + 1; E

我有一个应该向表中添加随机数据的查询,但它不起作用

我的查询如下所示:

DECLARE @i INT;
SET @i = 0;
WHILE (@i < 25000) DO
BEGIN
INSERT INTO ak_class (class_name, class_description)
VALUES (CONCAT('Rose', RAND()*250000),
CONCAT('Roses are awesome', RAND()*250000));
SET @i = @i + 1;
END WHILE;
声明@i INT;
设置@i=0;
而(@i<25000)是
开始
插入AKU类(类名称、类描述)
价值(CONCAT('Rose',RAND()*250000),
康卡特(“玫瑰太棒了”,兰特()*250000));
设置@i=@i+1;
结束时;
显示的错误如下:

Error Code : 1064
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'DECLARE @i INT' at line 1

Execution Time : 00:00:00:000
Transfer Time  : 00:00:00:000
Total Time     : 00:00:00:000

(0 row(s) affected)
Execution Time : 00:00:00:000
Transfer Time  : 00:00:00:000
Total Time     : 00:00:00:000

Error Code : 1064
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHILE (@i < 25000) DO
BEGIN
INSERT INTO ak_class (class_name, class_description)' at line 1

Execution Time : 00:00:00:000
Transfer Time  : 00:00:00:000
Total Time     : 00:00:00:000

(0 row(s) affected)
Execution Time : 00:00:00:000
Transfer Time  : 00:00:00:000
Total Time     : 00:00:00:000

Error Code : 1064
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'END WHILE' at line 1

Execution Time : 00:00:00:000
Transfer Time  : 00:00:00:000
Total Time     : 00:00:00:000
错误代码:1064
您的SQL语法有错误;检查与MySQL服务器版本对应的手册,以了解第1行“DECLARE@i INT”附近使用的正确语法
执行时间:00:00:00:000
换乘时间:00:00:00:000
总时间:00:00:00:000
(受影响的0行)
执行时间:00:00:00:000
换乘时间:00:00:00:000
总时间:00:00:00:000
错误代码:1064
您的SQL语法有错误;查看与您的MySQL服务器版本对应的手册,以了解在(@i<25000)DO时使用的正确语法
开始
在第1行的“ak_类(类名称、类描述)”中插入
执行时间:00:00:00:000
换乘时间:00:00:00:000
总时间:00:00:00:000
(受影响的0行)
执行时间:00:00:00:000
换乘时间:00:00:00:000
总时间:00:00:00:000
错误代码:1064
您的SQL语法有错误;检查与MySQL服务器版本对应的手册,以了解第1行“END WHILE”附近使用的正确语法
执行时间:00:00:00:000
换乘时间:00:00:00:000
总时间:00:00:00:000

MySQL不支持执行匿名存储过程代码块

您需要创建一个包含该代码的存储过程,然后调用它

创建过程:

DELIMITER $$

DROP PROCEDURE IF EXISTS insert_random_rows $$

CREATE PROCEDURE insert_random_rows () 
BEGIN
DECLARE @i INT;
SET @i = 0;
WHILE (@i < 25000) DO
BEGIN
INSERT INTO ak_class (class_name, class_description)
VALUES (CONCAT('Rose', RAND()*250000),
CONCAT('Roses are awesome', RAND()*250000));
SET @i = @i + 1;
END WHILE;
END $$
DELIMITER ;

这应该适合您。

我已经读过了,但仍然不明白..相关:除非定义存储过程,否则您不能执行declare/while。我非常确定您可以使用
SET@I:=0
CALL insert_ten_rows();