使用rusqlite带参数查询时触发InvalidParameterName错误求助
问题原因与解决方法
错误InvalidParameterName(":floor_number")的核心原因是**named_params!宏中使用了带冒号的参数名**,这不符合rusqlite的参数绑定规则:
- SQL语句里的命名参数需要带冒号前缀(比如
:floor_number),作为占位符标识 - 但在
named_params!宏的键名中,不需要加冒号,直接写参数名即可
修正后的代码如下:
pub fn park_vehicle( &self, vehicle_entry_time: i64, floor_number: i32, spot_number: i32, ) -> Result<(), Error> { let mut stmt = self.connection.prepare( " INSERT INTO vehicle(entry_time) VALUES (:entry_time); UPDATE parking_spot SET parked_vehicle_id = last_insert_rowid() WHERE floor_number = :floor_number AND spot_number = :spot_number;", )?; stmt.execute(named_params! { "entry_time": vehicle_entry_time, "floor_number": floor_number, "spot_number": spot_number, })?; Ok(()) }
简单说,就是把named_params!里的键名前的冒号全部去掉,让宏里的参数名和SQL语句中冒号后的部分完全匹配,rusqlite就能正确识别并绑定参数了。
内容的提问来源于stack exchange,提问作者Eduardo Rodrigues de Farias
相关产品推荐
相关产品推荐

