Вернуть идентификаторы вставленных значений PDO в MSSQL, используя ODBC

Мне нужно получить массив идентификаторов подписчиков, добавленных в базу данных в этой функции:

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 array('status'=> true,'ids'=> $ids);

Я прочитал и обнаружил, что SCOPE_IDENTITY (), вероятно, является наиболее надежным способом получения этих значений, но я не знаю, где поместить его в эту функцию, чтобы вернуть нужные мне значения. Первичный ключ в базе данных — это столбец 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);
}
}

Возвращение из этой функции теперь таково:

Array
(
[status] => 1
[id] => Array
(
)
)

Таким образом, кажется, выход не работает, как следует? Это становится незнакомцем и незнакомцем …

0

Решение

Разобрался, ребята!

Возникла проблема с положением 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); находится в пределах для каждого цикла, содержащего вставляемые данные, функция возвращает каждый идентификатор по желанию.

Если кто-то может увидеть какие-либо проблемы с этим, пожалуйста, дайте мне знать!

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]