在PHP中的高级MySQL存储过程语句中防止注入

时间:2014-03-22 10:57:11

标签: php mysql stored-procedures pdo sql-injection

我使用传递给存储过程的XML字符串将数据存储到我的数据库中。

通常,我使用PDO创建预准备语句以避免SQL injection通过bindParam()bindValue(),然后execute()。但是,为了优化我的数据库,我决定实现一个存储过程,该过程接收大量XML数据并一次完成所有写入。

存储过程将使用迭代器来遍历XML并将行插入数据库。

使用ExtractValue使用XPath表示法,我可以这样做:

CREATE DEFINER=`$DBU`@`%` PROCEDURE `write_comment_rows`(In xml_string text) 
BEGIN
    insert into my_table (comment) values (
        ExtractValue(xml_string, 'user_data/comment_field') 
    );
END;

如何确保XML中存储的comment_field中的数据可以放入我的数据库?

1 个答案:

答案 0 :(得分:1)

我认为这种方法没有优化。基于PHP的解析,以及在事务中包含的一系列准备好的插入,将是非常快速的。

无论如何,程序中可以使用inline prepared statements