在PHP中的一个语句中运行多个mysql查询的最佳方法是什么?
目前使用preg_split使用分号(;)拆分查询并运行多个查询。但据我所知,这种方法容易被注射。
在mysqli中有可能吗?怎么样?
感谢。
答案 0 :(得分:1)
要使用mysqli运行多个查询,请使用
mysqli_multi_query
- 执行一个或多个由分号连接的查询。 因为在这种情况下查询是一个字符串(而不是语句),所以你不能使用参数绑定,所以你需要确保queries are properly escaped。
另请参阅此页面专用于Multiple Statements with mysqli:
API函数
mysqli_query()
和mysqli_real_query()
未设置激活服务器中多个查询所需的连接标志。额外的API调用用于多个语句,以减少意外SQL注入攻击的可能性。攻击者可能会尝试添加; DROP DATABASE mysql
或; SELECT SLEEP(999)
等语句。如果攻击者成功将SQL添加到语句字符串但未使用mysqli_multi_query
,则服务器将不会执行第二个注入的恶意SQL语句。
再往下一页:
不支持在预准备语句中使用multiple语句。
所以是的,你需要确保任何用户提供的多个查询的部分都不是恶意的,在这种情况下,使用单个查询可能更简单。