我正在使用一个类来构建一个带有命名参数的MySQL查询,以便将数据绑定到该查询。一个查询示例可能是。
INSERT INTO table (title, text) VALUES (?title, ?text)现在,您可以通过提供参数名称和值来指定要用于这些占位符(?title、?text)的值。在这个过程中,值将被转义(基本上是对布尔值、数组等进行特殊处理的mysql_real_escape_string )。
问题是一个包含占位符本身的值,因为我按顺序替换它们。为了完成上面的示例,替换可能如下所示。
title -> "hey ?text"
text -> "lorem ipsum ..."我的第一个想法是首先用独特的值替换占位符。这些必须是不能出现在转义字符串中的字符串。
这是一种好的方法吗?有什么字符序列可以达到这个目的?
发布于 2011-11-06 10:43:52
看看如何在mysqli_stmt_bind_param()中使用mysqli_prepare()。
您需要做的是将现有的命名参数替换为问号。当您按顺序从查询字符串中提取命名参数时,您将构建一个有序数组,该数组将在mysqli_stmt_bind_param()函数中使用,并从值数组中放置适当的值。构建有序数组后,需要遍历该数组并进行类型检查,以便将$types值传递给mysqli_stmt_bind_param()。
我强烈建议您考虑使用像 这样的库,而不是使用自己的库。
发布于 2011-11-10 15:23:08
我相信你的整个概念都是错误的。
你把事情搞混了。
占位符应仅用于向查询添加值。不是为了创建花哨的语法。
没有什么能阻止你去做像这样的事情
$text = "lorem ipsum ...";$title =“嘿$text";
所以用这种方法准备好你的变量。然后才将它们放入查询中。
然而,我可能忽略了一些合理的问题。如果你有什么合理的反对意见--我会试着为你找到一个解决方案
至于你标题中的问题,我只是在逃避吗?和另一个??在我的占位符解析器中。
https://stackoverflow.com/questions/8024761
复制相似问题