我刚刚在控制器中执行了一些代码,并尝试找到最后插入的id。
但它显示错误:
这是我的代码:
$sql = 'INSERT into "Tbl_Community" ("User_id","Community_name") VALUES (10,'new community')';
$connection = Yii::app() -> db;
$command = $connection -> createCommand($sql);
$command -> execute();
echo $connection->getLastInsertID();
错误:
[message:protected] => SQLSTATE[42602]: Invalid name: 7 ERROR: invalid name syntax
[string:Exception:private] =>
[code:protected] => 42602
[file:protected] => D:\wamp\www\Tiein\framework\db\CDbConnection.php
[line:protected] => 548
[trace:Exception:private] => Array
(
[0] => Array
(
[file] => D:\wamp\www\Tiein\framework\db\CDbConnection.php
[line] => 548
[function] => lastInsertId
[class] => PDO
[type] => ->
[args] => Array
(
[0] =>
)
)
答案 0 :(得分:4)
使用postgresql,你不能通过这种方式获得最后一次
$lastId= Yii::app()->db->getLastInsertID();
试试这个(tbl_user_group_id是你的表id列,_seq是postgresql)
$lastId = Yii::app()->db->getLastInsertID('tbl_user_group_id_seq');
或强>
$lastId= Yii::app()->db->getCommandBuilder()->getLastInsertID('{{tablename}}') ;
答案 1 :(得分:0)
除了user714965所指出的,我通常将参数放在执行中以确保它们被PDO正确使用。如果您在示例中编写SQL命令,并且从表单中读取参数则存在问题。
Yii::app()->db->createCommand('INSERT into "Tbl_Community" ("User_id","Community_name") VALUES (:User_id,:Community_name)')->execute(array(":User_id"=>10, ":Community_name"=>"new community"));
$id = Yii::app()->db->getLastInsertID();
答案 2 :(得分:0)
最后我得到了解决方案:
$sql = 'INSERT into "Tbl_Community" ("User_id","Community_name") VALUES (10,\'new community\')';
$connection = Yii::app() -> db;
$command = $connection -> createCommand($sql);
$command -> execute();
$id = $connection->getCommandBuilder()->getLastInsertID('{{Tbl_Community}}');
echo $id;
PDO :: lastInsertID()在与PDO_PGSQL一起使用时需要name参数,因此需要用Yiii::app()->db->getLastInsertID();
替换此代码Yii::app()->db->getCommandBuilder()->getLastInsertID('{{tablename}}') ;
请参阅此link
答案 3 :(得分:0)
回复这个帖子可能为时已晚。但情况就是这样。
如果您没有定义主键,那么要确保它是一件事。在桌面上,您最终会得到值为' NULL'