1

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

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

谢谢你的帮助。

克里斯

4

2 回答 2

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

最重要的是,这些是占位符。

于 2012-10-23T19:07:21.997 回答
0

这些字符?:形成参数化查询的标识符。稍后,您将值绑定到变量,引擎执行多个值的查询。这工作得更快,因为查询由服务器编译一次,而不是为每个变量=值集编译它。

于 2012-10-23T19:12:47.713 回答