gpt4 book ai didi

php - 如何确定从我的 html 表单中获取的输入值的数据类型,以便我可以使用它们在准备好的语句中绑定(bind)参数

转载 作者:行者123 更新时间:2023-11-29 05:01:18 25 4
gpt4 key购买 nike

我想动态确定从 HTML 输入表单中获取的输入值的数据类型。这将帮助我绑定(bind)要使用 PHP 插入到数据库中的数据的参数值。

此信息将帮助我确定字符串“sss”的值在下面的 MySQL 准备语句代码中,我想创建一个插入数据类,输入值可以是“sdib”类型的字符串、 double 、整数或 Blob。

 if($stmt = $mysqli->prepare($sql)) {
$stmt->bind_param("sss", $first_name, $last_name, $email);
}

我尝试了下面的代码,甚至尝试了 PHP 手册中使用 call_user_func_array() 的其他一些代码,但都没有成功。

我知道来自 HTML 表单的输入值始终是字符串。

// SECTION USING PREPARED STATEMENT IN INSERT QUERY
if ($stmt = $mysqli->prepare($sql)) {
$stmt->bind_param("sss", $first_name, $last_name, $email);
}

//CODE SHOWING HOW I AM TRYING TO GET DATA TYPE OF HTML INPUT VALUES
if (gettype($v) === "string") {
return "s";
} elseif (gettype($v) === "float") {
return "d";
} elseif (gettype($v) === "integer") {
return "i";
} elseif (gettype($v) === "binary") {
return "b";
} else {
$e = '..could not establish data type';
$this->setError($e);
echo $e;
}

我希望能够从 HTML 输入表单中动态获取数据类型部分“sss”。我要构造的语句与此类似

$stmt->bind_param("sddsii", $first_name, $last_name, $email);

最佳答案

正如在另一个答案中指出的那样,您所有来自 HTML 的值都是字符串。但是,您可能有来自其他来源的输入,您希望将其传递到您的语句中。如果一直使用字符串绑定(bind)会怎样?

最好的方法是测试它。

$data1 = '1';
$data2 = 2;
$data3 = '0.5-a';
$stmt = $mysqli->prepare('SELECT ?=1 AS f1, ?="2" AS f2, ?=0.5 AS f3');
$stmt->bind_param('sss', $data1, $data2, $data3); // binding string
$stmt->execute();
$row = $stmt->get_result()->fetch_assoc();
var_dump($row); // all true

在这些简单的例子中,没有区别。为什么?因为如果在数字上下文中使用,MySQL 会将字符串转换为适当的类型。

如果几乎​​所有内容都可以作为字符串发送,为什么要明确指定类型?
因为如果您知道值的数据类型,就不应来回转换它们。如果您有整数并且在 MySQL 中的数字上下文中使用它们,那么没有理由将它们转换为 MySQLi bind_param() 中的字符串。

另一个重要的用例是当 MySQL 真正区分类型时,例如在 ORDER BY 子句中。如果你绑定(bind)的是字符串而不是数字,那么顺序就会不同。 MySQL 可以采用表示 SELECT 中列号的序号或列名(不能绑定(bind))或字符串文字。

$data1 = '2';
// I want the records to be ordered by `name`, which is the second column
$stmt = $mysqli->prepare('SELECT id, name FROM products ORDER BY ?');
$stmt->bind_param('i', $data1); // binding integer instead of string

相关帖子:mysqli_stmt::bind_param() - specify another data type than “s” for each parameter

对于二进制或 blob,它们只是二进制字符串。这意味着它们没有字符集,排序和比较是基于列值中字节的数值。
如果您发现自己需要插入一个 blob 值,它很可能不是来自 HTML 形式的字符串,而是来自文件中的读取,您将知道您需要使用 b

关于php - 如何确定从我的 html 表单中获取的输入值的数据类型,以便我可以使用它们在准备好的语句中绑定(bind)参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58772873/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com