小编ban*_*skt的帖子

如何使用PDO在MySQL中存储BIGINT?

我知道这个问题不止一次在这里被问过,但我找不到解决办法.

我们正在使用一个数据库,我们将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.

php mysql pdo facebook

6
推荐指数
1
解决办法
3167
查看次数

正则表达式匹配字母数字字符,下划线,句点和破折号,只允许点和破折号在中间

目前,我正在使用这个:

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)

例如,我想匹配:

  1. pro.duct-name_
  2. _pro.duct.name
  3. p.r.o.d_u_c_t.n-a-m-e

但我不想匹配:

  1. pro..ductname
  2. .productname-
  3. -productname.
  4. -productname

php regex preg-match

5
推荐指数
1
解决办法
2万
查看次数

用于跟踪和分摊费用的数据库设计

我想设计一个 Web 应用程序来跟踪组织成员的财务状况。某些功能与Splittr非常相似。我使用 MWE 数据库图表定义我的要求:

  • “财务”表:每个用户将拥有一个个人财务账户,我使用以下三个红色表: 在此处输入图片说明
  • “SharedExpense”表:每个用户可以与许多“共享费用组”中的其他用户共享费用。对于每个组,我使用以下三个蓝色表: 在此处输入图片说明

(注意每个用户如何定义他们的共享金额,以及自己的共享费用类别。UserShare 表使用复合主键。)

问题:我必须将用户与他们的 3 个个人“财务”表和3N“SharedExpense”表(其中N是用户所属的“共享费用组”的数量)相关联。

尝试的解决方案

  1. 多个数据库。每个用户的“财务”表都有一个唯一的数据库。每个“共享费用组”在服务器上都有一个唯一的数据库。然后,我可以将一个主数据库中的用户与以下四个紫色表相关联:
    多数据库解决方案
    缺点:外键来自不同的数据库,需要备份的数据库数量较多。

  2. 多桌。我可以在同一个数据库中创建所有表,并将它们与四个绿色主表相关联: 多表解决方案
    在这里,表的数量是一个潜在的问题。如果有M用户和N“共享费用组”,那么就会有3M + 3N桌子!

问题:是否有更优雅、更简单的数据库设计?如果不是,以上两种解决方案中哪一种更好,为什么?

相关的先前 StackOverflow 问答链接

mysql database database-design

5
推荐指数
1
解决办法
5950
查看次数

标签 统计

mysql ×2

php ×2

database ×1

database-design ×1

facebook ×1

pdo ×1

preg-match ×1

regex ×1