我想知道在使用$ _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'不是正确的数据类型。 :○
答案 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);
将自动检测变量的类型并将其绑定。