php - php插入数据库值变为0
问题描述
我刚开始为一个学校项目编写 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();
?>
解决方案
问题是大多数字段都是字符串(varchar),但是当你绑定参数时,你将它们绑定为数字(i
-integer,d
-double)。
使用正确的数据类型进行绑定(s
- 字符串):
$stmt->bind_param("ssssi", $uniqueID, $device, $genericClass, $status, $building);
推荐阅读
- reactjs - 使用 React 在输入上的 onPaste 事件获得双倍价值
- javascript - 表达如何通过不同的端点重定向 json 数据
- html - 给定元素之前和之后的元素的 CSS 选择器
- mysql - Docker MySQL 启动后立即关闭,日志中没有可见错误
- javascript - 单击 Kendo Grid 按钮将数据传递到 Kendo Window
- react-native - 如何在 App Container 中正确堆叠嵌套导航器?
- c++ - 在 Code::Blocks on linux 中为 C++ GUI appz 设置 gtkmm-3.0
- python - 查找具有特定角色的号码
- matlab - 选择 3D 图像中的某些切片
- compiler-errors - Bazel for Mac os Lion