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