尽管使用了 PDO::PARAM_INT 参数,但 MySQL/PDO::quote() 在整数周围加上引号
问题:尽管使用了 PDO::PARAM_INT 参数,但 MySQL/PDO::quote() 在整数周围加上引号 无论我将什么值/数据类型对传递给$pdo->quote($value, $type);,它似乎总是将其引用为字符串: echo $pdo->quote('foo', PDO::PARAM_STR); /* 'foo', as expected */ echo $pdo->quote(
问题:尽管使用了 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_NATL
和PDO::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() 在输入字符串周围放置引号(如果需要)
虽然这表明_可能_存在值没有被引号包围的实例,但它并没有说肯定存在,也没有说明这些实例是什么。如果您认为这是文档中的错误,请提交错误报告,最好带有修复程序。
更多推荐
所有评论(0)