如何解决如何在SQL Server中使用PDO获得最后插入的行的ID?
| 在其他情况下,我可能会倾向于使用$result = mssql_query(\"INSERT INTO table (fields) VALUES (data);
SELECT CAST(scope_identity() AS int)\");
但是当我将插入用户提交的数据时,我想继续使用PDO,它返回一个空数组。
不幸的是,我在Linux服务器上运行PHP,并使用dblib与不支持interface1的Microsoft SQL Server进行接口。
请帮忙!
更新以包含代码示例
这是我正在使用的代码:col1是类型为int identity
的字段,而col2是类型为datetime
的字段,默认值为getdate()
。
// Connect to db with PDO
$pdo = new PDO( \'dblib:host=\' . $host . \';dbname=\' . $database . \';\',$username,$password,array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION) );
// Connect to db with MSSQL
$sql = mssql_connect( $host,$password );
mssql_select_db( $database,$sql );
// Create SQL statement
$query = \"INSERT INTO [table] ( col3,col4,col5 )
VALUES ( \'str1\',\'str2\',\'str3\' );
SELECT SCOPE_IDENTITY() AS theID;\";
// Run with MSSQL
echo \"Using MSSQL...\\n\";
$result = mssql_query( $query );
$the_id = mssql_result( $result,\'theID\' );
echo \"Query OK. Returned ID is \" . $the_id . \"\\n\";
// Run with PDO
echo \"\\nUsing PDO...\\n\";
$stmt = $pdo->query( $query );
$result = $stmt->fetchAll( PDO::FETCH_ASSOC );
print_r( $result );
这是显示的内容:
Using MSSQL...
Query OK. Returned ID is 149
Using PDO...
Array
(
)
我很想知道自己做了一些愚蠢的事情,而不是遇到可怕的死胡同:)
解决方法
您有几种选择:
SELECT @@IDENTITY - return the last ID created by actions of the current connection,regardless of table/scope
SELECT SCOPE_IDENTITY() - last ID produced by the current connection,in scope,regardless of table
SELECT IDENT_CURRENT(\'name_of_table\'); - last ID produced on that table,regardless of table/scope/connection
在这三个中,SCOPE_IDENTITY()是最佳候选者。
,也许您将返回两个行集。尝试添加SET NOCOUNT ON;消除INSERT \的行集,或者如果驱动程序支持,则使用$ stmt-> nextRowset。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。