2011-05-26 7 views
9

ISon INSERTed satırının kimliğini, SQL Server ile PDO kullanarak nasıl alabilirim? Diğer koşullar altında

$result = mssql_query("INSERT INTO table (fields) VALUES (data); 
         SELECT CAST(scope_identity() AS int)"); 

kullanımı cazip olabilir ama kullanıcı tarafından gönderilen veri ekleme edileceği gibi, boş bir dizi döner PDO, kullanmaya devam etmek istiyorum.

Maalesef, bir Linux sunucusunda PHP çalıştırıyorum ve PDO::lastInsertID()'u desteklemeyen Microsoft SQL Server ile arabirim kurmak için dblib kullanıyorum.

Lütfen yardım edin! col1 tip int identity bir alandır ve col2 getdate() bir varsayılan bir datetime geçerli:

Güncelleme kod örneği

İşte kullanıyorum kodu dahil etmek.

// 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, $username, $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, 0, '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); 

Ve bu görüntülenen budur:

Using MSSQL... 
Query OK. Returned ID is 149 

Using PDO... 
Array 
(
) 

Ben bir şey aptal yapılması yerine korkunç çıkmaz :)

cevap

10

karşı gelip etmişti öğrenmek isteriz) üç, SCOPE_IDENTITY (Of

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 

en iyi aday: birkaç seçeneğiniz var.

+0

'PDO, yine de boş bir dizi döndürür. Yanlış bir şey mi yapıyorum? – Kalessin

+0

Belki de sonuçları taklit etmeyi deneyin: SELECT scope_identity() AS id' –

+0

Öneriniz için teşekkürler. Yine de boş bir dizi alıyorum. Sorgumu kullandığım test kodunu içerecek şekilde güncelledim. – Kalessin

0

Belki de iki satır kümesinin döndüğünü görüyorsunuz. SET NOCOUNT ON eklemeyi deneyin; INSERT'in satır grubunu ortadan kaldırmak veya sürücünüz destekliyorsa $ stmt-> nextRowset öğesini kullanın.

İlgili konular