问题:尽管使用了 PDO::PARAM_INT 参数,但 MySQL/PDO::quote() 在整数周围加上引号

无论我将什么值/数据类型对传递给$pdo->quote($value, $type);,它似乎总是将其引用为字符串:

echo $pdo->quote('foo', PDO::PARAM_STR); /* 'foo', as expected */

echo $pdo->quote(42, PDO::PARAM_INT);    /* '42', expected 42 unquoted */

我只是想知道这是否是预期的功能。我使用准备好的语句来执行实际的查询,但我试图获取 create 最终的查询字符串(用于调试/缓存),并手动构建它们。

正如标题所示,这是使用 MySQL 驱动程序创建$pdo的时候。由于不可用,我没有尝试过其他人。

解答

  • Oracle,SQLite和Firebird驱动程序都引用为[PDO 或 MySQL 驱动程序参数 zwz1001zwz18z 02, 输入 zwz18z102

  • MSSQL驱动程序仅检查参数类型是否应该使用国家或常规字符集(基于PDO::PARAM_STR_NATLPDO::PARAM_STR_CHAR[标志(https://github.com/php/php-src/blob/PHP-8.1.10/ext/pdo_oci/oci_driver.c#L357));否则,它会忽略参数类型。

  • PostgreSQL 驱动程序只区分二进制大对象和所有其他对象。

  • ODBC 驱动程序没有实现引用器。

您期望的(缺少)行为是报告为错误并关闭为“虚假”,这意味着该行为是设计使然。也许文档在说明时具有误导性:

PDO::quote() 在输入字符串周围放置引号(如果需要)

虽然这表明_可能_存在值没有被引号包围的实例,但它并没有说肯定存在,也没有说明这些实例是什么。如果您认为这是文档中的错误,请提交错误报告,最好带有修复程序。

Logo

华为、百度、京东云现已入驻,来创建你的专属开发者社区吧!

更多推荐