【发布时间】:2020-05-22 13:51:10
【问题描述】:
背景信息:
我正在创建一个将为我处理某些查询的类。其中一个查询是 SELECT 查询,用户可以在其中根据子句选择某些内容。我成功检索了列的 TYPES,但不知道如何根据列的 TYPE 实际决定应该给 bind_param()(第一个参数)的 TYPE。
如果检索到的列类型是某种类型,我最初的计划是廉价并简单地硬编码应该给出哪个参数。
我最初想法的例子:
if ($type === "varchar") {
$aVariable = "s";
}
//OR USE A SWITCH, BUT YOU GET THE IDEA
bind_param($aVariable, $someOtherVar);
但是,由于许多不同的原因,这不是我满意的事情。所以我的问题是:
问题:
如何使用 TYPES 列(如果可能)来确定提供给 bind_param() 的参数是否应该是以下类型之一:“s、i、d、b”,而不必对检索到的类型进行硬编码= 某个字母。
【问题讨论】:
-
只需将所有变量绑定为“s”
-
@YourCommonSense 如果一个人可以将所有类型设置为“s”,那么使用其他类型有什么意义?让我换种说法:可以设置所需类型的人与简单地将所有类型设置为字符串的人相比有什么优势?
-
优势大部分是想象的。一些你几乎没有机会遇到的极端情况
-
我为 PDO 写了一个答案,描述了issues with parameter data-types,这可能有助于您理解。但除了
NULL和LOB数据类型之外,对于大多数查询,使用字符串数据类型应该是安全的。实际上,MySQL 会在适当的地方自动转换数字字符串,但是当提供的数据不是适当的类型时,有些实例会产生意外的结果。 -
@fyrye null 也由 "s" 处理