MYSQL存储过程不检查where子句并返回整个表

时间:2014-04-16 04:12:02

标签: mysql stored-procedures

CREATE DEFINER=`root`@`localhost` PROCEDURE `Viewuser`(IN `userID` VARCHAR(50))
BEGIN
SELECT * FROM  `tbl_userdetails` WHERE `UserID`=userID;
END

在上面的代码中,应返回给定用户ID的用户详细信息。但它在执行此存储过程时返回整个表。

2 个答案:

答案 0 :(得分:0)

尝试这种方法:

mysql> delimiter //

mysql> CREATE PROCEDURE simpleproc (OUT param1 INT)
    -> BEGIN
    ->   SELECT COUNT(*) INTO param1 FROM t;
    -> END//
Query OK, 0 rows affected (0.00 sec)

mysql> delimiter ;

mysql> CALL simpleproc(@a);
Query OK, 0 rows affected (0.00 sec)

mysql> SELECT @a;
+------+
| @a   |
+------+
| 3    |
+------+
1 row in set (0.00 sec)

<强> https://dev.mysql.com/doc/refman/5.5/en/create-procedure.html

答案 1 :(得分:0)

得到了答案。表中的字段名称不应与变量名称相同。这就是问题

创建DEFINER = root @ localhost程序Viewuser(IN ID VARCHAR(50)) 开始 SELECT * FROM tbl_userdetails WHERE UserID = ID; END

这很好用