通过PDO调用存储过程时,不保存MySQL ENUM值

I have created this stored procedure:

CREATE PROCEDURE LogAdd(
    IN log_title VARCHAR(128),
    IN log_type ENUM('message','warning','error'),
    IN log_info TEXT
) 
DETERMINISTIC 
MODIFIES SQL DATA 
COMMENT 'Insert a new log entry' 
BEGIN
    INSERT INTO `tbl_logs` (
        `title`,
        `type`,
        `info`
    )
    VALUES (
        log_title,
        log_type,
        log_info
    );
END

which works when executed with data directly added in the query. But when I bind parameters, the type column, which is of ENUM type, is not saved (is empty). I can see that the value is sent as a string:

$stmt = $pdo -> prepare("CALL LogAdd(?, ?, ?)");
$stmt -> bindParam(1, 'Message title');
$stmt -> bindParam(2, 'message');
$stmt -> bindParam(3, 'Message information');

$stmt -> execute();

Why isn't the ENUM value saved?

doumo2501
doumo2501 谢谢。那就是问题所在
4 年多之前 回复
douquanqiao6788
douquanqiao6788 如果要使用表达式,请使用bindValue而不是bindParam。它不绑定到变量引用。
4 年多之前 回复
doubi1713
doubi1713 bindParam的第二个参数需要是一个变量,你不能把文字字符串放在那里。请显示您的实际代码。
4 年多之前 回复
douxie7339
douxie7339 打开严格错误,并查看插入是否导致错误。如果插入枚举中未列出的值,则默认为插入空字符串而不是抛出错误。你在bind调用中看到的'message',可能是像message<invisibleunicodechar>那样的东西
4 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐