我需要在此函数中添加一系列添加到数据库中的订阅者:
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之后绑定一个参数,还是我完全在想这个?
非常感谢任何帮助!
编辑:我尝试使用与this question中的函数类似的函数,并且收到了无效的游标错误,因此将其调整为如此(请注意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 :(得分: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);
在包含插入数据的每个循环的a内时,函数会根据需要返回每个id。
如果有人能看到任何固有的问题,请告诉我!