我有一个库,我已经成功地使用PHP 5.1.6,借助SWIG(v1.3.40)生成的一些包装器代码.
我刚刚升级到PHP 5.3.2,我看到以下错误:
PHP Warning: PHP Startup: Unable to load dynamic library '/usr/lib/php/modules/myLib_php.so' - /usr/lib/php/modules/myLib_php.so: undefined symbol: zend_error_noreturn in Unknown on line 0
Run Code Online (Sandbox Code Playgroud)
经过调查,似乎由SWIG(myLib_wrap.c)生成的包装器代码包含对PHP函数的调用:zend_error_noreturn并且PHP 5.3.2中没有此函数?
有没有人见过这个问题?事情似乎工作,如果我手动更新生成的代码,这样,而不是调用的zend_error_noreturn 它只是调用zend_error.这种方法安全吗?
我知道我可以像这样更新一条记录 - 但是如何才能访问已更新的记录的id?(我正在使用MSSQL,所以我不能使用Oracles RowId)
update myTable
set myCol = 'foo'
where itemId in (select top 1 itemId from myTable )
Run Code Online (Sandbox Code Playgroud)
如果我正在使用插入,我可以使用getGeneratedKeys来获取id字段值,但我认为没有相应的更新?
我知道我可以使用可滚动的结果集来做我想要的
即
stmt = conn.prepareStatement("select top 1 myCol, itemId from myTable", ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);
ResultSet resultSet = stmt.executeQuery();
if(resultSet.first()){
resultSet.updateString(1, "foo");
resultSet.updateRow();
String theItemId = resultSet.getString(1)
}
resultSet.close();
Run Code Online (Sandbox Code Playgroud)
但我担心性能,因为测试显示负载下的锁定超时,我想知道是否有更好/更简单的方法?
- 编辑:刚刚完成这个问题......当我们迁移到MSSQL2005时,我们将升级我们的代码以使用Rich的答案.在当前版本中,我们使用了锁提示:(UPDLOCK ROWLOCK READPAST)来缓解原始代码显示的性能问题.