【问题标题】:Zend Framework - PDO Insert not working due to empty primary keyZend 框架 - 由于主键为空,PDO 插入不起作用
【发布时间】:2014-10-29 05:10:48
【问题描述】:

我与另一位开发人员一起使用 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 框架(和其他框架)中,插入语句应该仍然有效,因为数据库会自动根据AUTO_INCREMENT 分配一个值。这就是它在服务器上的工作方式,但在我的本地主机上却没有。

任何帮助将不胜感激。

【问题讨论】:

  • 从数组中移除 id_client

标签: php zend-framework pdo


【解决方案1】:

确保您的 id_client 是 AUTO_INCREMENT,您的表定义似乎没有定义自动增量字段。

其次,正如@dixromos98 提到的,也从数组中删除 id_client。

【讨论】:

    【解决方案2】:

    从您尝试插入的值列表中删除列 client_id,因为包含它会使数据库尝试插入您提供的值(并且空白是一个值)。

    其次,您需要从id_client` int(20) NOT NULL,` toid_clientint(20) NOT NULL AUTO_INCREMENT, 更改列定义,以便数据库知道如何在插入时确定该列的正确值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-06-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多