带有问号和冒号的MySQL语句

时间:2012-10-23 19:02:08

标签: php mysql pdo

我正在尝试破解正在执行Mysql查询的PHP程序中的特定语句。查询有?:和?在里面。有什么功能?

$data = db_get_field("SELECT data FROM ?:order_data WHERE order_id = ?i AND type = 'A'", $order_id);

感谢您的帮助。

克里斯

2 个答案:

答案 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编译它。