我刚刚开始为一个学校项目编写PHP,但偶然发现了一个问题。我有一个API,可以向其中发布一些数据。数据是传感器的名称,ID和类别。当我尝试将其插入到mySQL数据库中时,它没有输入正确的数据。而不是输入实际数据,它向除构建之外的每一列输入0。甚至是状态列,这是一个硬编码的字符串。 我已经尝试了几乎所有东西(由于我有限的PHP知识而知道),但我感到很困惑。
require_once "../meta.php";
$tmpdevice = clean($_POST['label']);
$device = str_replace('¥', ':', $tmpdevice);
$tmpgenericClass = clean($_POST['zwave_class_generic']);
$genericClass = str_replace('¥', ':', $tmpgenericClass);
$tmpuniqueID = clean($_POST['thingUID']);
$uniqueID = str_replace('¥', ':', $tmpuniqueID);
$status = 'Not Accepted';
$building = 303;
if ($uniqueID == "") {
echo '{"status":"error"}';
exit;
}
if ($device == "") {
echo '{"status":"error"}';
exit;
}
if ($genericClass == "") {
echo '{"status":"error"}';
exit;
}
$servername = DB_HOST;
$username = DB_USER;
$password = DB_PASSWORD;
$databasename = DB_NAME;
$conn = new mysqli($servername, $username, $password, $databasename);
if ($conn->connect_error) {
die("Connection error: " . $conn->connect_error);
exit;
}
$stmt = $conn->prepare("INSERT IGNORE INTO Actuator (UniqueID, Device, GenericClass, Status, Building) values (?,?,?,?,?)");
$stmt->bind_param("idddd", $uniqueID, $device, $genericClass, $status, $building);
if ($stmt->execute()) {
echo '{"status":"ok"}';
} else {
echo '{"status":"error"}';
}
$conn->close();
?>
答案 0 :(得分:2)
问题在于大多数字段都是字符串(varchar),但是当您绑定参数时,会将它们绑定为数字(i
-整数,d
-双精度)。
使用正确的数据类型进行绑定(s
-字符串):
$stmt->bind_param("ssssi", $uniqueID, $device, $genericClass, $status, $building);