性能第二,安全第一
尽量不要使用字符串拼接调用方式,或者能保证数据安全(提前做好验证处理)的时候可以使用拼接
基本点:存入数据库的字符串做转义,将标点和特殊符号全换成html实体,例如,
<转换为< >转换为>
在必要的时候反向转换或不转换
1,参数化语句防止注入
sql = "select user,pwd,sex,birthday,add_time,group from User where user='%s' and pwd='%s'" dbre = cursor.execute(sql,(name,pwd))
2,调用存储过程
delimiter \\
DROP PROCEDURE IF EXISTS proc_sql \\
CREATE PROCEDURE proc_sql (
in nid1 INT,
in nid2 INT,
in callsql VARCHAR(255)
)
BEGIN
set @nid1 = nid1;
set @nid2 = nid2;
set @callsql = callsql;
PREPARE myprod FROM @callsql;
-- PREPARE prod FROM 'select * from tb2 where nid>? and nid<?'; 传入的值为字符串,?为占位符
-- 用@p1,和@p2填充占位符
EXECUTE myprod USING @nid1,@nid2;
DEALLOCATE prepare myprod;
END\\
delimiter ;
以上为定义存储过程,为摘抄 sql="select * from User where nid>? and nid<?" cursor.callproc('proc_sql', args=(11, 15, mysql))
依照我的习惯,第一种使用的比较多