我已经加入了另一个使用Zend Framework处理项目的开发人员,我无法在本地计算机上使用任何数据库插入语句。出于测试目的,我使用的是root用户,我可以使所有其他语句都能正常工作。
我的配置是nginx 1.6.2,PHP版本5.5.18和PDO Mysql API版本5.6.21。
服务器配置是apache 2.0,PHP版本5.4.22和PDO Mysql API版本5.5.34
问题是每次我尝试在数据库中插入一行时都会出现这样的错误
Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[HY000]: General error: 1366 Incorrect integer value: '' for column 'id_client' at row 1'
在这个例子中,我尝试使用以下代码在$table
client
中插入一行,这在Zend中非常标准:
$this->_db->insert ( $table, $values );
$id = $this->_db->lastInsertId ();
这是我试图插入的数组$values
array (size=13)
'id_client' => string '' (length=0)
'id_profile' => string '2' (length=1)
'status' => string '1' (length=1)
'client' => string 'ABC' (length=3)
'contact' => string 'Fred' (length=4)
'phone' => string '0412345678' (length=10)
'address' => string 'Sydney Rd' (length=6)
'suburb' => string 'Sydney' (length=6)
'state' => string 'New South Wales' (length=15)
'post_code' => string '2000' (length=4)
'notas' => string '' (length=0)
'bg' => string '#FEAF1D' (length=7)
'logo' => string '' (length=0)
这是表client
的数据库结构,它在末尾显示主键id_client
CREATE TABLE IF NOT EXISTS `client` (
`id_client` int(20) NOT NULL,
`client` char(100) COLLATE utf8_spanish_ci DEFAULT NULL,
`contact` char(20) COLLATE utf8_spanish_ci DEFAULT NULL,
`phone` char(20) COLLATE utf8_spanish_ci DEFAULT NULL,
`address` char(50) COLLATE utf8_spanish_ci DEFAULT NULL,
`suburb` char(30) COLLATE utf8_spanish_ci DEFAULT NULL,
`state` char(20) COLLATE utf8_spanish_ci DEFAULT NULL,
`post_code` char(6) COLLATE utf8_spanish_ci DEFAULT NULL,
`county` char(20) COLLATE utf8_spanish_ci DEFAULT NULL,
`notas` text COLLATE utf8_spanish_ci,
`logo` varchar(200) COLLATE utf8_spanish_ci DEFAULT NULL,
`bg` char(10) COLLATE utf8_spanish_ci DEFAULT NULL,
`id_profile` int(2) DEFAULT NULL
) ENGINE=MyISAM AUTO_INCREMENT=10 DEFAULT CHARSET=utf8 COLLATE=utf8_spanish_ci;
ALTER TABLE `client`
ADD PRIMARY KEY (`id_client`), ADD KEY `id_profile` (`id_profile`);
正如您在$values
数组中看到的那样id_client
没有值,这就是我收到错误的原因,但是在zend框架(以及其他)中,insert语句应该仍然可以作为数据库将根据AUTO_INCREMENT
自动分配值。这就是它在服务器上运行的方式,但它并没有在我的localhost上这样做。
任何帮助都将不胜感激。
答案 0 :(得分:2)
确保您的id_client是AUTO_INCREMENT,您的表定义似乎没有定义自动增量字段。
其次,@ dixromos98提到了从数组中删除id_client。
答案 1 :(得分:1)
从您尝试插入的值列表中删除列client_id,因为包括它会使数据库尝试插入您提供的值(并且空白是值)。
其次,您需要更改id_client` int(20) NOT NULL,` to
id_client int(20) NOT NULL AUTO_INCREMENT,
的列定义,以便数据库知道如何在插入时确定该列的正确值。