我正在尝试破译 PHP 程序中正在执行 Mysql 查询的特定语句。查询有 ?: 和 ? 在里面。有什么功能?
$data = db_get_field("SELECT data FROM ?:order_data WHERE order_id = ?i AND type = 'A'", $order_id);
谢谢你的帮助。
克里斯
它们看起来像是准备好的语句的占位符。您提供?
稍后将提供实际值的位置。考虑 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
最重要的是,这些是占位符。
这些字符?
是:
形成参数化查询的标识符。稍后,您将值绑定到变量,引擎执行多个值的查询。这工作得更快,因为查询由服务器编译一次,而不是为每个变量=值集编译它。