How do I determine datatype of input values that am getting from my html form so that I can use them to bind parameters in prepared statement
我想动态确定从HTML输入表单获取的输入值的数据类型,这将有助于我绑定要使用PHP插入数据库中的数据的参数值。
此信息将帮助我确定字符串'sss'的值
在下面的MySQL预准备语句代码中,我想创建一个插入数据类,并且输入值的类型可以为字符串,双精度,整数或Blob类型的'sdib'。
1 2 3 | if($stmt = $mysqli->prepare($sql)) { $stmt->bind_param("sss", $first_name, $last_name, $email); } |
我尝试了以下代码,甚至尝试了徒劳地使用
我了解HTML表单的输入值始终是字符串。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | // 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'。我要构造的语句与此
类似
1 | $stmt->bind_param("sddsii", $first_name, $last_name, $email); |
在另一个答案中指出,所有来自HTML的值都是字符串。但是,您可能有来自其他来源的输入,您希望将这些输入传递给语句。如果一直使用字符串绑定会发生什么?
最好的方法是对其进行测试。
1 2 3 4 5 6 7 8 | $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会将字符串转换为适当的类型。
如果几乎??所有内容都可以作为字符串发送,为什么要明确指定类型?
因为如果您知道值的数据类型,则不应该来回转换它们。如果您有整数,并且在数字上下文中在MySQL中使用它们,则没有理由在MySQLi
另一个重要的用例是MySQL确实在类型上有所区别,例如在
1 2 3 4 | $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()-为每个参数指定除" s"之外的另一种数据类型
当涉及二进制或blob时,它们只是二进制字符串。这意味着它们没有字符集,并且排序和比较基于列值中字节的数字值。
如果您发现自己需要插入blob值,则该值很可能不是来自HTML形式的字符串,而是来自读取文件,并且您会知道需要使用
我想动态确定我从HTML中获取的输入值的数据类型
HTML中的" T"代表"文本"。 HTML中只有一种数据类型,即字符串。接收来自HTML的输入的任何代码都必须已经知道要使用哪种数据类型,并将字符串输入转换为该类型。
例如,如果您的数据库希望用户的年龄为整数,那么当您的代码收到该用户输入(字符串)时,它必须将其转换为整数,然后将该整数传递到数据库中。铅>