gpt4 book ai didi

php - 存储未知长度的数组

转载 作者:行者123 更新时间:2023-11-29 02:09:25 25 4
gpt4 key购买 nike

我让我的用户在 HTML 表单中添加数字输入并用值填充它们。表单在提交时被序列化并发送到一个 PHP 文件,该文件使用 PDO 将数据插入 MySQL 数据库。数据库表有一堆列用于存储表单中的其他值,但是用于存储用户添加的输入的列是这样设置的:

input_value_1
input_value_2
input_value_3
input_value_4
...
...
input_value_10

这些列允许 NULL,因为我根本不知道用户是否会添加任何数字输入。

有没有更好的方法来存储这些数字?

下面是我的 JS 的一部分,用于获取表单数据并发送到 LandOwners.php,它将值插入到我的数据库中。代码没有数字输入(我还没有添加它们,因为我不确定我应该如何存储它们的数据)。

$("#createLandOwnerForm").on( "submit", function( event ) {
event.preventDefault();

createLandOwner($(this).serialize(), appendCreatedLandOwnerToSelect, appendCreatedLandOwnerToSelect_Error);

$('#createLandOwnerForm')[0].reset();
});

function createLandOwner(landOwner, onSuccess, onError) {
var data = landOwner + "&action=create";

$.ajax({
type: "post",
url: host + 'LandOwners.php',
data: data,
success: onSuccess,
error: onError
});
}

下面是 LandOwners.php 的一部分,它没有输入到我的数据库(我还没有添加它们,因为我不确定我应该如何/是否应该)。

$stmt = $pdo->prepare("INSERT INTO land_owner (land_owner_name, land_owner_identification_number, land_owner_contact, land_owner_phone, land_owner_email, land_contracts) VALUES (?, ?, ?, ?, ?, ?)");
$stmt->execute([$land_owner_name, $land_owner_identification_number, $land_owner_contact, $land_owner_phone, $land_owner_email, $land_contracts]);

$last_inserted_land_owner_id = $pdo->lastInsertId();

$stmt = $pdo->prepare("SELECT * FROM land_owner WHERE land_owner_id = ?");
$stmt->execute([$last_inserted_land_owner_id]);

while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
$arr[] = $row;
}

if(!$arr) exit('No rows');

echo json_encode($arr);

$stmt = null;

下面是 LandOwners.php 从我的数据库中选择数据的部分。我想(仍然能够)获得 JSON 格式的结果。

$arr = [];

if (isset($_POST["land_owner_id"])){
$stmt = $pdo->prepare("SELECT * FROM land_owner WHERE land_owner_id = ?");
$stmt->execute([$land_owner_id]);
} else {
$stmt = $pdo->prepare("SELECT * FROM land_owner");
$stmt->execute();
}

while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
$arr[] = $row;
}

if(!$arr) exit('No rows');

echo json_encode($arr);

$stmt = null;
break;

最佳答案

如果您发现自己开始在桌面上出现 column1column2 - 很可能您的设计存在缺陷,您应该创建一个单独的表 - 每个 columnX 都有自己的一行。如果您发现自己在同一张表上有多个重复列,那么(几乎)总是有一个单独的表更好。

这样,您就可以避免在列中存储以逗号分隔的值,如果您突然不得不引入另一个值 column{X+1} ,则可以避免破坏您的代码/查询 - 而可以将其作为您需要多少输入值。

对于您来说,这就像一个名为 land_owner_input 的新表,您可以在其中获得值(您将放入 columnX),以及对land_owner 中值所属的行。

典型的设计模式是这样的。

CREATE TABLE land_owner_input (
land_owner_input_id INT(11) AUTO_INCREMENT
land_owner_id INT(11),
land_owner_input_value VARCHAR(MAX)
);

请记住,新表中的 land_owner_id 应与其引用的 ID 具有完全相同的类型和大小。

您还可以在land_owner_idland_owner 表的ID 之间创建外键约束以确保数据完整性。

一旦有了新表,就可以使用 LEFT JOIN(如果您只想返回有输入的行,则可以使用普通的 JOIN)一起查询它们-值)。

SELECT *
FROM land_owner AS lo
LEFT JOIN land_owner_input AS loi
ON loi.land_owner_id = lo.land_owner_id

关于php - 存储未知长度的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57161730/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com