Ce que dit le titre de la question. Avec une requête telle que SELECT @@IDENTITY AS ins_id
, dois-je fournir le nom de la table ou toute autre information pour spécifier de quelle table/base de données je parle?Comment faire pour insérer l'ID dans MSSQL en PHP?
Répondre
@@IDENTITY
renvoie l'identité la plus récente générée dans la session en cours. Dans la plupart des cas, vous voudrez probablement utiliser SCOPE_IDENTITY
à la place, ce qui renvoie l'identité la plus récente générée dans la portée actuelle.
Par exemple, si vous insérez une ligne dans table1, mais cet insert déclenche un trigger qui insère une ligne dans table2, puis @@IDENTITY
retournera l'identité de table2 alors SCOPE_IDENTITY
retournera l'identité de table1.
INSERT INTO my_table (my_column) VALUES ('test')
-- return the identity of the row you just inserted into my_table
-- regardless of any other inserts made by triggers etc
SELECT SCOPE_IDENTITY() AS ins_id
Non; cela fonctionne un peu comme SELECT LAST_INSERT_ID() dans mysql, récupérant la dernière valeur d'identité insérée. Vous pouvez jeter un oeil à this in-depth examination pour en savoir plus sur ce que vous pourriez vouloir être préoccupé par cela.
Voici un extrait de code basé sur le code Joomla. $ dbh est la connexion à la base de données (résultat de mssql_connect()). Le nom de la clé (ID) est mis à jour si vous transmettez l'argument $ keyName.
Ce code utilise le mot-clé MSSQL "OUTPUT" pour obtenir l'ID (ou toute valeur requise) de la valeur insérée.
function mssql_insertObject($table, &$object, $keyName = NULL)
{
global $dbh;
if($keyName) {
$fmtsql = 'INSERT INTO '. $table .' (%s) OUTPUT INSERTED.' . $keyName . ' VALUES (%s) ';
}
else {
$fmtsql = 'INSERT INTO '. $table .' (%s) VALUES (%s) ';
}
$fields = array();
foreach (get_object_vars($object) as $k => $v) {
if (is_array($v) or is_object($v) or $v === NULL) {
continue;
}
if ($k[0] == '_') { // internal field
continue;
}
$fields[] = $k;
$values[] = "'" . str_replace("'", "''", $v) . "'";
}
$sql = sprintf($fmtsql, implode(",", $fields) , implode(",", $values));
$query = mssql_query($sql, $dbh);
if($query === false) {
return false;
}
if(is_resource($query))
{
if($keyName) {
$id = mssql_result($query, 0, 0);
if($id) {
$object->$keyName = $id;
}
}
mssql_free_result($query);
}
return true;
}
J'aime cette solution car je crois qu'elle couvre toutes vos bases puisque vous ne pouvez pas obtenir un GUID (pk) avec SCOPE_IDENTITY ..mais en utilisant mssql_result en conjonction avec OUTPUT INSERTED dans votre instruction sql fonctionne avec des pk qui sont des entiers auto incrémentés ou uniques pique comme les GUID. – greaterKing
- 1. scénario Forum pour PHP + MSSQL
- 2. pour insérer() ou pour faire du nouveau
- 3. Comment faire pour échapper $ dans PHP en utilisant preg_replace?
- 4. Conversion de MSSQL GetUTCDate() en ticks PHP/Unix/MySQL
- 5. Insérer des données binaires dans SQL Server en utilisant PHP
- 6. insérer l'image dans un fichier RTF en utilisant PHP
- 7. Comment faire pour empaqueter des fichiers PHP en exe?
- 8. Comment faire pour déduire du temps en php?
- 9. Comment faire pour exécuter le fichier php dans une variable?
- 10. Que fait === faire en PHP
- 11. Ecrire une requête pour insérer une valeur varbinary dans PostgreSQL
- 12. Comment faire pour Page Résultats de "php -info" en PHP CLI sur Windows
- 13. MySQL - Insérer japonais de PHP - Encodage Troubles
- 14. Comment faire pour supprimer un morceau de balises HTML dans une page HTML en utilisant PHP
- 15. Comment faire pour décoder de gros fichiers en base64 dans PHP
- 16. Pour faire correspondre une figure dans $ _GET par PHP
- 17. Comment insérer du texte japonais dans une table Postgres en utilisant PHP?
- 18. Comment puis-je insérer des liens dans des fichiers swf en utilisant PHP?
- 19. Comment faire pour échapper des guillemets simples dans MySQL
- 20. PHP et MSSQL - LARGE extraction de champs de texte
- 21. Comment faire pour supprimer les valeurs en double d'un tableau en PHP et compter l'occurrence?
- 22. oAuth en PHP pour faire une requête à 2 pattes
- 23. faire un blog en utilisant php
- 24. PHP - Tableau haché, insérer à l'index?
- 25. Comment insérer une CLOB en utilisant OleDb
- 26. MSSQL - Diviser un champ en 3 champs
- 27. Comment faire pour convertir UTF-16 chaîne hexadécimale en UTF-8 en PHP?
- 28. Comment faire pour supprimer les valeurs en double d'un tableau en PHP
- 29. Comment insérer XHTML dans XML
- 30. Comment faire un strtr sur UTF-8 en PHP?
J'ai aussi vu: SELECT CAST (COALESCE (SCOPE_IDENTITY(), @@ IDENTITY) int) – jjwdesign
voté vers le bas. Je ne vois pas de php, la question était "Comment obtenir l'ID d'insertion dans MSSQL en PHP". –