- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
当我得到 lastInsertId() 时,我的 pdo 连接发生了一些奇怪的事情:在 90% 的情况下它工作正常,但在 10% 的情况下它返回 0(我不知道它是真的 0 还是 FALSE) .但在 100% 的情况下,我的记录都已成功插入。
这是我的代码:
function execute_insert($sql, $values) {
try {
$dbConnection = new PDO('mysql:dbname=mydb;host=localhost;charset=utf8', 'username', 'mypass');
$dbConnection->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
$dbConnection->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$dbConnection->beginTransaction();
$stmt = $dbConnection->prepare($sql);
$stmt->execute($values);
$i = $dbConnection->lastInsertId();
$dbConnection->commit();
return $i;
} catch (PDOException $e) {
echo "erro :S - " . $e->getMessage();
die();
}
}
//blablabla
$sql = "INSERT INTO ai_pessoas(nome, tipo, cpf, orgao_emissor_id,
rg_uf, rg, telefone1, telefone2, celular1, cidade_id, cep, endereco,
numero,complemento,bairro, email_principal, email_secundario, email_principal_confirmado,
dt_nascimento, oferta_id) ";
$sql .= "VALUES(:nome,1,:cpf,:orgaorg,:ufrg,:rg,:telefone,:outroTelefone,:celular,:cidade,:cep,:endereco,:numero,:complemento,:bairro,:email,:emailAlternativo,FALSE,:datanasc,:idOfertaAtual);";
$idPessoa = execute_insert($sql,
array(
':nome' => $nome,
':cpf' => $cpf,
':orgaorg' => $orgaorg,
':ufrg' => $ufrg,
':rg' => $rg,
':telefone' => $telefone,
':outroTelefone' => $outroTelefone,
':celular' => $celular,
':cidade' => $cidade,
':cep' => $cep,
':endereco' => $endereco,
':numero' => $numero,
':complemento' => $complemento,
':bairro' => $bairro,
':email' => $email,
':emailAlternativo' => $emailAlternativo,
':datanasc' => $datanasc,
':idOfertaAtual' => $idOfertaAtual
));
if ($idPessoa > 0){
//sometimes enters here, sometimes not
}
我的记录被插入,但“if ($idPessoa > 0)”有时会起作用,这意味着 $idPessoa 为 0 或 FALSE。
有什么线索吗?
非常感谢!
最佳答案
你可以试试LAST_INSERT_ID()为此目的。
附言您的函数每次都会连接。
附言我还看到您不处理错误和回滚。我认为在您的 10% 中插入失败。探索关于双重调用此函数,因为您在某些字段上有 UNIQUE 索引。并添加支票 result of execute和 errorInfo .
关于php - PDO::lastInsertID 有时不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16599430/
关闭。这个问题是not reproducible or was caused by typos .它目前不接受答案。 这个问题是由于错别字或无法再重现的问题引起的。虽然类似的问题可能是on-topi
我已经挣扎了几个小时了。我正在创建一个新的用户表单,我需要将数据插入两个不同但连接的表中,但是我在这里发布的代码根本没有给出任何错误,事实上它正在插入第一个查询(# query1) 到数据库,但不是
这个查询有多错?我可以像这样插入多个查询吗?我可以像这样使用 lastInsertId 吗? $pdo = Database::connect(); $dflt = 'DEFAULT';
$query = $database->prepare("UPDATE table SET value = value WHERE value = '$value'"); $query_1->exec
作为类(class)项目,我正在使用 PHP/MySQL 开发一个小型网络应用程序。 当用户创建一个账户(账户类型必须是导师或学生)时,我按照以下逻辑将他插入到数据库中: 注意:我通过将 USER 设
为什么? try{ $st = $this->prepare("INSERT INTO thetable (a,b) VALUES (?,?)"); $st->execute(arra
当我得到 lastInsertId() 时,我的 pdo 连接发生了一些奇怪的事情:在 90% 的情况下它工作正常,但在 10% 的情况下它返回 0(我不知道它是真的 0 还是 FALSE) .但在
是否可以从方法中获取 lastInsertId(),如果可能的话,是否可以从特定表中获取值? 我尝试使用的方法在我的db.class.php public function getLastID(){
我对 lastInsertId() 函数的编写方式感到困惑。例如,我有以下使用 lastInsertId() 函数的查询。 $myinsert = $pdo->prepare("INSERT INTO
有没有办法(在单个查询中)插入多行,并且让某些行知道先前插入的行的 id? insert into my_table(contents, css) values ('some text', 'colo
这个问题对我来说又很重要。有没有人有解决办法? $conn = new PDO('mysql:dbname=test;host=127.0.0.1', 'root', '********'); $co
这个问题不太可能对任何 future 的访客有帮助;它只与一个较小的地理区域、一个特定的时间点或一个非常狭窄的情况相关,通常不适用于全世界的互联网受众。如需帮助使此问题更广泛适用,visit the
这很奇怪。我正在运行一个仅包含单个 INSERT 的查询,前面有一个 SET 语句。查询看起来像这样: SET @discount:=(SELECT discount * :applyDiscount
在网上找到了一些关于AUTO_INCREMENT的相关资料,想请教各位。 这是我发现的一些与 AUTO_INCREMENT 插入相关的代码。我不确定该字段是否为 auto_increment,如果我应
我是一名初级程序员,正在对数据库应用程序进行非常简单的插入。 这是我的代码: $hostname = 'localhost'; $username = '***********'; $password
这个问题在这里已经有了答案: MySQL and PDO: Could PDO::lastInsertId theoretically fail? (2 个答案) 关闭 9 年前。 我有一个通过 A
我目前正在构建一个 symfony/doctrine 应用程序,其中一个模型具有以下结构: Session: columns: session_id: type: intege
我有以下 PHP 脚本,它运行良好,并使用 PDO 事务正确地将所有数据插入 MySQL,但仅在第一次运行时。初次运行后,我尝试再次插入相同的数据。第一个 lastInsertId 然后开始返回 0,
如果我有这段代码: prepare("INSERT INTO `table` (row) VALUES ('1')"); $q->execute(); $lastid = $sql->
我想知道 lastInsertId() 究竟是如何工作的。 Atm,我像这样使用它来获取插入行的 id,这样我就可以在代码的其他部分使用这个 id。例如: $stmt = $db->prepare('
我是一名优秀的程序员,十分优秀!