Мне нужно получить массив идентификаторов подписчиков, добавленных в базу данных в этой функции:
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
(
)
)
Таким образом, кажется, выход не работает, как следует? Это становится незнакомцем и незнакомцем …
Разобрался, ребята!
Возникла проблема с положением 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);
находится в пределах для каждого цикла, содержащего вставляемые данные, функция возвращает каждый идентификатор по желанию.
Если кто-то может увидеть какие-либо проблемы с этим, пожалуйста, дайте мне знать!
Других решений пока нет …