我知道这个问题不止一次在这里被问过,但我找不到解决办法.
我们正在使用一个数据库,我们将facebook id存储为BIGINT(20).
create table users(
fb_id bigint(20) NOT NULL,
user_name varchar(30) NOT NULL,
CONSTRAINT uk_name unique (user_name),
CONSTRAINT pk_fb_id primary key (fb_id)
)ENGINE=INNODB;
Run Code Online (Sandbox Code Playgroud)
但是PHP的PDO引擎只能插入PHP的最大整数值,即2147483647.
$stmt->bindParam(':fb_id', $this->fb_id, PDO::PARAM_INT);
Run Code Online (Sandbox Code Playgroud)
据我所知,这是非常明显的,因为我们受到PHP中整数的最大值的限制.我试着用字符串 -
$stmt->bindParam(':fb_id', $this->fb_id, PDO::PARAM_STR);
Run Code Online (Sandbox Code Playgroud)
但它仍然不起作用.
我想知道是否可以有一个解决方法将其存储为bigint.
目前,我正在使用这个:
if (preg_match ('/^[a-zA-Z0-9_]+([a-zA-Z0-9_]*[.-]?[a-zA-Z0-9_]*)*[a-zA-Z0-9_]+$/', $product) ) {
return true;
} else {
return false
}
Run Code Online (Sandbox Code Playgroud)
例如,我想匹配:
pro.duct-name__pro.duct.namep.r.o.d_u_c_t.n-a-m-e但我不想匹配:
pro..ductname.productname--productname.-productname我想设计一个 Web 应用程序来跟踪组织成员的财务状况。某些功能与Splittr非常相似。我使用 MWE 数据库图表定义我的要求:
(注意每个用户如何定义他们的共享金额,以及自己的共享费用类别。UserShare 表使用复合主键。)
问题:我必须将用户与他们的 3 个个人“财务”表和3N“SharedExpense”表(其中N是用户所属的“共享费用组”的数量)相关联。
尝试的解决方案:
多个数据库。每个用户的“财务”表都有一个唯一的数据库。每个“共享费用组”在服务器上都有一个唯一的数据库。然后,我可以将一个主数据库中的用户与以下四个紫色表相关联:

缺点:外键来自不同的数据库,需要备份的数据库数量较多。
多桌。我可以在同一个数据库中创建所有表,并将它们与四个绿色主表相关联:

在这里,表的数量是一个潜在的问题。如果有M用户和N“共享费用组”,那么就会有3M + 3N桌子!
问题:是否有更优雅、更简单的数据库设计?如果不是,以上两种解决方案中哪一种更好,为什么?
相关的先前 StackOverflow 问答链接: