php - MySQL 从 pdo lastInsertID 中获取 0

标签 php mysql pdo

像许多其他人一样,使用 pdo lastInsertID() 对我来说仅返回 0。我已经查看了 stack Overflow 提出的所有帮助问题,并在网上进行了搜索,但仍然得到 0。我认为代码是正确的,但我显然错过了一些东西,因为无论我尝试什么,我仍然得到 0。

我的表有一个自动递增的 id 列(名为“id”)。它也是表的主键。我使用存储过程进行插入,因此代码如下所示:

$stmt = $pdo_write->prepare('CALL sp_Save_Requests(:formSecret,:ipAddress)');
$stmt->bindParam(':formSecret', $formSecret, PDO::PARAM_STR);
$stmt->bindParam(':ipAddress', $ipAddress, PDO::PARAM_STR);
$stmt->execute();
$lastID = $pdo_write->lastInsertID();

即使表中存在新的 ID,此操作始终返回 0 - 正如下面从 phpmyadmin 导出的内容所示。

我使用单独的连接,具体取决于我是选择还是插入/更新。在本例中,连接对象是:

try {
    $pdo_write = new PDO("mysql:host=$myServer;dbname=$myDB", $myRW_UID, $myRW_PW);
    $pdo_write->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING );
    $pdo_write->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
    $pdo_write->setAttribute( PDO::ATTR_EMULATE_PREPARES,TRUE );
} catch(PDOException $e) {
    echo 'RW Connection Failed: '.$e->getMessage();
    exit();
}

一个可能的问题 - 我确实使用触发器在表中创建和设置 guid,但它被设置为在实际插入之前触发。尽管实际表的名称已更改,但来自表的 phpmyadmin 的转储如下。:

SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
SET AUTOCOMMIT = 0;
START TRANSACTION;
SET time_zone = "+00:00";

-- Table structure for table `tbl_test`

CREATE TABLE `tbl_test` (
  `id` int(10) NOT NULL,
  `guid` varchar(100) NOT NULL,
  `formSecret` varchar(100) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
--
-- Triggers `tbl_test`
--
DELIMITER $$
CREATE TRIGGER `tr_TestRequests_GUID` BEFORE INSERT ON `tbl_test` FOR EACH  ROW SET NEW.guid = UUID()
$$
DELIMITER ;
--
-- Indexes for table `tbl_test`
--
ALTER TABLE `tbl_test`
  ADD PRIMARY KEY (`id`),
  ADD UNIQUE KEY `guid` (`guid`),
  ADD UNIQUE KEY `id` (`id`);
--
-- AUTO_INCREMENT for table `tbl_test`
--
ALTER TABLE `tbl_test`
  MODIFY `id` int(10) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=44;
COMMIT;

如果不需要,我宁愿不使用选择来提取 ID。但是,我很困惑,希望有人能看到我所缺少的东西。非常感谢您的帮助。

最佳答案

事实证明,我在对 out 变量进行 id 赋值时遇到了语法错误。花了很长时间才看到它,但现在它可以工作了。

感谢您的反馈,让我再次回顾这一点。

关于php - MySQL 从 pdo lastInsertID 中获取 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51179054/

相关文章:

php - PDO 只返回 mysql 的一半结果

php - 使用 PDO 和 MySQL 确认记录 INSERT

php - 错误消息 URL 参数导致重复内容

php - store 函数不将数据保存到数据库

使用 INNER JOIN 选择 PHP PDO

php: 如何防止 $_POST 中的 SQL 注入(inject)

java - java中批量插入只取一个查询,无法取所有查询

php - 在php中获取上一年的开始和结束日期

php - SQL 注入(inject)漏洞神奇地 self 修复?

php - PHP 5.4 之前使用 PHP_QUERY_RFC3986 的 HTTP 构建查询