我有一个用户看起来像这样的对象。
$user = new User();
$user->name = 'Name';
$user->age = 34;
在我的数据库中有五个字段,
id, name, age, location, reputation
我有一个方法(对于我的所有表)使用以下SQL从表中动态收集所有字段。这样我就可以动态地获取要放在INSERT语句中的占位符数。
SHOW FIELDS FROM users
SHOW FIELDS FROM questions
SHOW FIELDS FROM topics
然后我编写了一个create方法,它计算表中字段的数量,并准备一个充满占位符的字符串,并自动将其插入到我的PDO查询中,这样做:
INSERT INTO users VALUES (?, ?, ?, ?, ?)
然后我接受我的$ user对象并从它拥有的所有属性中创建一个数组,并将该数组提供给execute参数中的PDO预处理语句。这工作正常,该函数将数据插入数据库。
我的问题是,有时我还没有填充我的对象的所有属性,因此我填充了用空字符串提供execute函数的数组的其余部分。当它到达一个取整数的字段时,它会导致致命错误并且不起作用。如果不为代码中的每个字段编写正确的数据类型,我能够动态地将空字段插入到我的数据库中,该怎么办?因为这一切都是动态完成的,所以我不能提前知道在那里放一个整数或一个空字符串。有没有办法完全省略一些占位符?还有其他解决方案吗?
答案 0 :(得分:5)
将可选的mysql字段设置为接受NULL。