使用$ _POST ['name']时的数据类型是什么

时间:2013-03-11 18:32:34

标签: php mysqli

我想知道在使用$ _POST ['name'时数据类型是什么,假设我是绑定参数:

$unsafe_variable1=$_POST['name'];
$unsafe_variable2=$_POST['email'];
$unsafe_variable3=$_POST['city'];

$stmt=$con->prepare("INSERT INTO mytable (name, email, city) VALUES ('$bname', '$email', '$city')");

$obj->bind_param('sss', $unsafe_variable1, $unsafe_variable3, $unsafe_variable3);

我的猜测是's'为字符串。


第二件事是我使用sss时会收到警告:

Number of variables doesn't match number of parameters in prepared statement

这让我觉得也许's'不是正确的数据类型。 :○

2 个答案:

答案 0 :(得分:0)

$ _ POST& $ _GET参数将始终是字符串。

您可以使用gettype()进行检查,

echo gettype($_POST['variable_from_form']);

仅举一个示例,您会看到它会将1识别为字符串,将1.11识别为字符串,将any text识别为字符串,将true/false识别为字符串而不是布尔值。这是因为php使用PHP的类型杂耍系统将非字符串值转换为字符串。

答案 1 :(得分:-1)

请注意,您直接使用变量:

[...] VALUES ('$bname', '$email', '$city')

只需将其更改为:

[...] VALUES (?, ?, ?)

POST变量通常是字符串。因此,sss绑定是完美的。为了避免将来出现问题,您可以:

$stmt = $con->prepare("INSERT INTO mytable (name, email, city) VALUES (:name, :email, :city)");
$params['name'] = $_POST['name'];
$params['email'] = $_POST['email'];
$params['city'] = $_POST['city'];
$stmt->execute($params);

将自动检测变量的类型并将其绑定。