我有一个简单的存储过程:
DELIMITER $$
CREATE PROCEDURE `findUserByName`(IN `name` VARCHAR(36))
BEGIN
set @name = name;
PREPARE findStmt FROM 'SELECT * FROM user WHERE name=?';
EXECUTE findStmt USING @name;
END$$
我在 PHP 中使用prepare 方法调用它:
$stmt = $mysqli->prepare('CALL findUserByName(?)');
$stmt->execute([$inputName]);
我对上面的代码有两个疑问:
这个赋值语句
set @name = name;
显得有些多余,我可以直接使用参数吗name
?MySQL不允许我使用USING name
,我也尝试过将参数名称改为@name
,但不会被识别。既然我在PHP中使用了prepare方法,那么将参数与SQL连接起来是否安全?
set @sql = CONCAT('SELECT * FROM user WHERE name=''', name, ''''); PREPARE findStmt FROM @sql; EXECUTE findStmt;