PHP中能否向PK列插入自增值?插入后如何获取该值?
如何在PHP插入客户时获取自动生成的主键ID
当然可以做到!如果你的client_id列是数据库的自增主键(比如MySQL中设置为INT PRIMARY KEY AUTO_INCREMENT),插入新客户后,我们可以直接获取这个自动生成的ID用于后续操作。下面针对你的代码给出具体修改方案:
1. 修改insertNewClient方法,返回自增ID
你的现有插入方法只执行了插入操作,但没有返回生成的主键。假设你使用的是Zend Framework的Zend_Db_Table,它的insert()方法会自动返回插入行的自增主键值,我们可以利用这一点修改方法:
public function insertNewClient($idDeposant) { $data = array( 'RAI_SOC' => 'A compléter de toute urgence', 'CODE_CLIENT' => 'XXXXX', 'STATUT_CLI' => '2', 'COND_REGL' => '2', 'CODE_COCLICO' => $idDeposant ); foreach($data as $key => $value) { if($value === null) unset($data[$key]); } // 执行插入并获取生成的自增ID $clientId = $this->getDbTable()->insert($data); return $clientId; }
如果需要把ID直接绑定到Application_Model_Client实例,也可以调整方法参数,让它接收一个模型对象:
public function insertNewClient($idDeposant, Application_Model_Client $client) { // ... 原有数据处理代码 ... $clientId = $this->getDbTable()->insert($data); // 将ID设置到模型中 $client->setClientID($clientId); return $clientId; }
2. 修改调用代码,获取并使用新ID
在调用insertNewClient的地方,直接接收返回的ID即可:
$idDeposant = (int)$data->IdentificationDepot['IDDeposant']; $client = new Application_Model_Client(); $clientMapper = new Application_Model_ClientMapper(); $clientMapper->getClientByCodeCoclico($idDeposant, $client); $idClient = $client->getClientID(); // Jira 407 // Si le client n'existe pas, on crée un nouveau client if ($idClient == NULL) { $idDeposant = (int)$data->IdentificationDepot['IDDeposant']; $clientMapper = new Application_Model_ClientMapper(); // 方案1:直接接收返回的ID $idClient = $clientMapper->insertNewClient($idDeposant); // 方案2:如果修改了方法参数,传递$client实例并从模型获取ID // $clientMapper->insertNewClient($idDeposant, $client); // $idClient = $client->getClientID(); }
关键前提
确保你的数据库表中client_id列已经正确设置为自增主键,否则数据库不会自动生成递增的数值,上述方法也无法获取到有效的ID。
内容的提问来源于stack exchange,提问作者Nico Boulein
相关产品推荐
相关产品推荐

