Return 使用 ODBC 从 PDO 到 MSSQL 的插入值的 ID
Return IDs of inserted values PDO to MSSQL using ODBC
我需要在此函数中获取添加到数据库中的订阅者 ID 数组:
function insert_test($pdo, $fullname, $email) {
if ($SQL = $pdo->prepare("INSERT INTO subscribers ([dateAdded],[dateUpdated],[fullname],[email],[isActive]) VALUES (GETDATE(), GETDATE(), :fullname, :email, 1)")) {
$SQL->bindValue(':fullname', $fullname, PDO::PARAM_STR);
$SQL->bindValue(':email', $email, PDO::PARAM_STR);
$SQL->execute();
return array('status'=> true);
} else {
return array('status'=> false);
}
}
但是我正在努力弄清楚如何获取值并 return 它们在数组中,如下所示:
return array('status'=> true,'ids'=> $ids);
我已经阅读并发现 SCOPE_IDENTITY() 可能是获取这些值的最可靠方法,但我不知道将它放在这个函数中的什么位置以 return 值我需要的。数据库中的主键是 id 列。
会不会是这样的:
if ($SQL = $pdo->prepare("INSERT INTO subscribers ([dateAdded],[dateUpdated],[fullname],[email],[isActive]) VALUES (GETDATE(), GETDATE(), :fullname, :email, 1) SELECT SCOPE_IDENTITY()"))
然后在那个名为 $ids 的参数之后绑定一个参数,还是我完全考虑过了?
如有任何帮助,我们将不胜感激!
编辑: 我尝试使用与 中的函数类似的函数,但收到无效光标错误,因此将其调整为如下所示(注意closeCursor 是如何修复无效游标错误):
function insert_test($pdo, $fullname, $email) {
if ($SQL = $pdo->prepare("INSERT INTO subscribers ([dateAdded],[dateUpdated],[fullname],[email],[isActive]) OUTPUT INSERTED.id VALUES (GETDATE(), GETDATE(), :fullname, :email, 1)")) {
$SQL->bindValue(':fullname', $fullname, PDO::PARAM_STR);
$SQL->bindValue(':email', $email, PDO::PARAM_STR);
$SQL->execute();
$SQL->closeCursor();
$ids = $SQL->fetchAll(PDO::FETCH_ASSOC);
return array('status'=> true, 'id' => $ids);
} else {
$pdo = null;
return array('status'=> false);
}
}
这个函数的 return 现在是这样的:
Array
(
[status] => 1
[id] => Array
(
)
)
所以输出似乎没有正常工作?这越来越陌生了......
想通了伙计们!
closeCursor();
方法的位置有问题函数现在看起来像这样:
function insert_test($pdo, $fullname, $email) {
if ($SQL = $pdo->prepare("INSERT INTO subscribers ([dateAdded],[dateUpdated],[fullname],[email],[isActive]) OUTPUT INSERTED.id VALUES (GETDATE(), GETDATE(), :fullname, :email, 1)")) {
$SQL->bindValue(':fullname', $fullname, PDO::PARAM_STR);
$SQL->bindValue(':email', $email, PDO::PARAM_STR);
$SQL->execute();
$ids = $SQL->fetchAll(PDO::FETCH_ASSOC);
$SQL->closeCursor();
foreach ($ids as $id) {
return $id['id'];
}
} else {
$pdo = null;
return false;
}
}
因此,当 insert_test($pdo, $fullname, $email);
位于包含要插入的数据的每个循环中时,函数 returns 每个 id 都按需要。
如果有人发现这有任何固有问题,请告诉我!
我需要在此函数中获取添加到数据库中的订阅者 ID 数组:
function insert_test($pdo, $fullname, $email) {
if ($SQL = $pdo->prepare("INSERT INTO subscribers ([dateAdded],[dateUpdated],[fullname],[email],[isActive]) VALUES (GETDATE(), GETDATE(), :fullname, :email, 1)")) {
$SQL->bindValue(':fullname', $fullname, PDO::PARAM_STR);
$SQL->bindValue(':email', $email, PDO::PARAM_STR);
$SQL->execute();
return array('status'=> true);
} else {
return array('status'=> false);
}
}
但是我正在努力弄清楚如何获取值并 return 它们在数组中,如下所示:
return array('status'=> true,'ids'=> $ids);
我已经阅读并发现 SCOPE_IDENTITY() 可能是获取这些值的最可靠方法,但我不知道将它放在这个函数中的什么位置以 return 值我需要的。数据库中的主键是 id 列。
会不会是这样的:
if ($SQL = $pdo->prepare("INSERT INTO subscribers ([dateAdded],[dateUpdated],[fullname],[email],[isActive]) VALUES (GETDATE(), GETDATE(), :fullname, :email, 1) SELECT SCOPE_IDENTITY()"))
然后在那个名为 $ids 的参数之后绑定一个参数,还是我完全考虑过了?
如有任何帮助,我们将不胜感激!
编辑: 我尝试使用与
function insert_test($pdo, $fullname, $email) {
if ($SQL = $pdo->prepare("INSERT INTO subscribers ([dateAdded],[dateUpdated],[fullname],[email],[isActive]) OUTPUT INSERTED.id VALUES (GETDATE(), GETDATE(), :fullname, :email, 1)")) {
$SQL->bindValue(':fullname', $fullname, PDO::PARAM_STR);
$SQL->bindValue(':email', $email, PDO::PARAM_STR);
$SQL->execute();
$SQL->closeCursor();
$ids = $SQL->fetchAll(PDO::FETCH_ASSOC);
return array('status'=> true, 'id' => $ids);
} else {
$pdo = null;
return array('status'=> false);
}
}
这个函数的 return 现在是这样的:
Array
(
[status] => 1
[id] => Array
(
)
)
所以输出似乎没有正常工作?这越来越陌生了......
想通了伙计们!
closeCursor();
方法的位置有问题函数现在看起来像这样:
function insert_test($pdo, $fullname, $email) {
if ($SQL = $pdo->prepare("INSERT INTO subscribers ([dateAdded],[dateUpdated],[fullname],[email],[isActive]) OUTPUT INSERTED.id VALUES (GETDATE(), GETDATE(), :fullname, :email, 1)")) {
$SQL->bindValue(':fullname', $fullname, PDO::PARAM_STR);
$SQL->bindValue(':email', $email, PDO::PARAM_STR);
$SQL->execute();
$ids = $SQL->fetchAll(PDO::FETCH_ASSOC);
$SQL->closeCursor();
foreach ($ids as $id) {
return $id['id'];
}
} else {
$pdo = null;
return false;
}
}
因此,当 insert_test($pdo, $fullname, $email);
位于包含要插入的数据的每个循环中时,函数 returns 每个 id 都按需要。
如果有人发现这有任何固有问题,请告诉我!