Php 使用$#u POST[';name';]时的数据类型是什么

Php 使用$#u POST[';name';]时的数据类型是什么,php,mysqli,Php,Mysqli,我想知道使用$\u 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')"); $ob

我想知道使用$\u 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”可能不是正确的数据类型o请注意,您正在直接使用变量:

[...] 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);

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

$\u POST&$\u GET参数将始终是字符串

您可以使用gettype()来检查

echo gettype($_POST['variable_from_form'])


仅举一个例子,您将看到它将把
1
识别为字符串,
1.11
识别为字符串,
任何文本
识别为字符串,
true/false
识别为字符串而不是布尔值。这是因为php使用php的类型转换系统将非字符串值转换为字符串。

您的语句中没有任何
占位符<代码>$stmt=$con->prepare(“插入mytable(名称、电子邮件、城市)值(?、、?)”
您刚刚直接插入了变量……但是数据类型
sss
是正确的,
bind_param()
调用看起来不错。哦!我正在阅读手册,我想我需要的是值名称而不是“?”:o:P让我哑口无言。谢谢你指出这一点。:)成功了!谢谢你的帮助。感谢您让我知道“s”是正确的数据类型。:)我还有一个问题。执行上面准备好的语句后,我想使用if条件,条件是:$stmt->execute();如果(!mysqli_query($con,$stmt)){die('Error:'.mysqli_Error($mysqli))}我不知道是谁做的,他/她为什么这么做:O我甚至连投票或否决投票的最低声誉都没有。