首页 > 解决方案 > 如何根据检索到的列类型为 bind_param 动态分配正确的类型?

问题描述

背景资料:

我正在创建一个将为我处理某些查询的类。其中一个查询是 SELECT 查询,用户可以在其中根据子句选择某些内容。我成功地检索了列的类型,但不知道如何根据列的类型实际决定应该给予哪个类型bind_param()(第一个参数)。

如果检索到的列类型是某种类型,我最初的计划是廉价并简单地硬编码应该给出哪个参数。

我最初想法的例子:

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”,而不必硬编码检索到的类型 =某封信。

标签: phpsqlmysqli

解决方案


您的代码不应该尝试猜测类型。您应该将所有内容绑定为字符串。99.99% 的时间不会有任何影响。在某些极端情况下,实际类型会有所不同,但在这些情况下,当您知道类型应该是什么时,您可以对类型进行硬编码。如果您猜测类型,那么您只会将更多错误添加到您的软件中。

您从 HTML 表单收到的所有数据都是字符串类型。MySQL 根据上下文动态地进行类型转换。为什么要费心在 PHP 中转换值?只需将所有内容按原样发送到 MySQL 并让它决定类型应该是什么。


推荐阅读