背景信息:
我正在创建一个类,它将为我处理某些查询。其中一个查询是select查询,用户可以根据子句选择一些内容。我成功地检索到了列的类型,但是不知道如何根据列的类型来决定应该给哪个类型 bind_param()
(第一个参数)。
我最初的计划是降低成本,简单地硬编码,如果检索到的列类型是某个类型,那么应该给出哪个参数。
我最初想法的例子:
if ($type === "varchar") {
$aVariable = "s";
}
//OR USE A SWITCH, BUT YOU GET THE IDEA
bind_param($aVariable, $someOtherVar);
然而,这不是我满意的事情,因为许多不同的原因。所以我的问题是:
问:如何使用列类型(如果可能的话)来确定 bind_param()
应该是以下类型之一:“s,i,d,b”,而不必硬编码检索到的类型=某个字母。
2条答案
按热度按时间5lwkijsr1#
猜测参数类型总是有味道的。然而,将所有参数设置为“s”在大多数情况下都是完美的。
所以让我给你建议另一个解决方案。使类型显式但可选。默认情况下,它将是“s”,但可以手动定义类型,就像我在mysqli helper函数中所做的那样:
当您不需要任何特定类型(大多数情况下)时,只需将它们排除在外:
但是每次你需要它时,它都已经在这里显式了,所以你可以设置你想要的确切类型:
简洁明了
b91juud32#
您的代码不应该试图猜测类型。你应该把所有东西都绑成绳子。99.99%的时候都没什么区别。在某些情况下,实际类型会产生差异,但在这些情况下,当您知道类型应该是什么时,可以对类型进行硬编码。如果你猜的类型,那么你只会添加更多的错误到你的软件。
从html表单接收的所有数据都是string类型。mysql根据上下文动态地执行类型转换。为什么要费心在php中转换值呢?只需将所有内容按原样发送到mysql,让它决定应该是什么类型。