我有:
INSERT INTO post(title,message) VALUES (:title,:message)
其中:message
值包含一些带符号的随机文本(包括逗号)。
由于逗号符号是语句组件之间的分隔符:
如何转义 :message
值以将其包含的逗号保留在字符串上下文中而不被解释为分隔符?
答案 0 :(得分:4)
你不需要。与PDO一样,使用预准备语句的全部意义在于查询的结构与数据分开发送。这意味着数据中的字符永远不会与查询结构的某些部分混淆。
在这方面,您已经完成了使查询安全所需的一切。
答案 1 :(得分:0)
Prepared statements my friend.
这就是php.net所说的;
查询只需要解析(或准备)一次,但可以使用相同或不同的参数多次执行。什么时候 准备好查询,数据库将进行分析,编译和优化 它执行查询的计划。对于复杂查询,此过程可以 占用足够的时间会显着减慢应用程序的速度 如果需要多次重复相同的查询 参数。通过使用准备好的声明,应用程序可以避免 重复分析/编译/优化循环。这意味着准备好了 语句使用更少的资源,因此运行得更快。
不需要引用准备语句的参数;驱动程序自动处理这个。如果应用程序专门使用 准备好的语句,开发人员可以肯定没有SQL注入 将发生(但是,如果正在构建查询的其他部分 使用非转义输入,SQL注入仍然可行。)