我正在尝试破解正在执行Mysql查询的PHP程序中的特定语句。查询有?:和?在里面。有什么功能?
$data = db_get_field("SELECT data FROM ?:order_data WHERE order_id = ?i AND type = 'A'", $order_id);
感谢您的帮助。
克里斯
答案 0 :(得分:1)
它们看起来像准备好的陈述的占位符。您提供?
,稍后您将提供实际值。请考虑PHP文档中的这个示例:
$stmt = $dbh->prepare("INSERT INTO REGISTRY (name, value) VALUES (?, ?)");
$stmt->bindParam(1, $name);
$stmt->bindParam(2, $value);
来源:http://php.net/manual/en/pdo.prepared-statements.php
您的特定示例似乎来自CS-Cart。例如,根据他们的文档?i
强制将传递给该占位符的值转换为整数(这类似于sprintf
的工作方式)。
$number = 9;
echo sprintf( "I have %d tasks.", $number );
// Outputs "I have 9 tasks."
在上述情况下,$number
被视为整数。如果我试图将字符串传递到该插槽中,我会得到非常不同的结果:
$number = "completed";
echo sprintf( "I have %d tasks.", $number );
// Outputs "I have 0 tasks."
请注意我的类型不匹配,因此0
替换了输出中的completed
。
最重要的是,这些是占位符。
答案 1 :(得分:0)
字符?
是:
标识符,用于形成参数化查询。稍后将值绑定到变量,引擎会对多个值执行查询。这样工作得更快,因为查询是由服务器编译一次而不是为每个variable = value set编译它。