0

我正在编写一个脚本,需要将最后插入的 ID 回显到数据库,但我没有得到任何输出。

注意:运行下面的代码时,它确实将数据插入到数据库中,但这样做之后我没有得到最后插入行的 ID,如果有人能告诉我可能有什么问题,我将不胜感激,谢谢提前。

这是由于明显原因而隐藏了特定细节的代码;

<?php
error_reporting(E_ALL);
session_start();
require_once('connect_file.php');
$Data = $_REQUEST['json'];

$pdo = new PDO("mysql:host=xxxxxx;dbname=xxxxxx", xxxxxxxx xxxxxxxxx, array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES \'UTF8\''));

$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

$query = "INSERT INTO `users` (`ID`,`Facebook_id`,`First_name`) VALUES ('', :xxxxx, :xxxxxxx)";

$sth = $pdo->prepare($query);

try {
$sth->execute(array(
    ":xxxxx" => $Data['id'],
    ":xxxxxxx" => $Data['first_name']
);

} catch (PDOException $e) {
    die($e->getMessage());
}

echo $pdo->lastInsertId();

?>
4

3 回答 3

0

将此行添加到顶部的引导代码中

ini_set('display_errors',1);

这个代码在底部

var_dump($pdo->lastInsertId());

$sth = $pdo->query("SELECT * FROM users order by id DESC LIMIT 1");
var_dump($sth->fetch());
于 2013-06-04T13:49:15.807 回答
0

您应该阅读execute()的返回值,它是一个boolean

我想这是错误的,这意味着您的请求中有错误。

在我看来,您在表users中使用 id auto-increment 。

如果是这种情况,我建议让您的查询摆脱id columnn

$query = "INSERT INTO `users` (`Facebook_id`,`First_name`) VALUES (:xxxxx, :xxxxxxx)";
[...]
$sth->execute(array(
    ":xxxxx" => $Data['id'],
    ":xxxxxxx" => $Data['first_name'],
);

然后lastInsertId()调用应该返回您期望的 id。

于 2013-06-04T13:06:32.040 回答
0

在您的查询中,您将零长度字符串分配''给您的ID.

$query = "INSERT INTO用户(ID ,Facebook_id ,First_name ) VALUES ('', :xxxxx, :xxxxxxx)";

我假设您将使用 AUTO_INCREMENT INT 列,您可以分配 NULL 或 0 以获得正确数量的参数。

文档

没有为 AUTO_INCREMENT 列指定值,因此 MySQL 自动分配了序列号。您还可以将 NULL 或 0 显式分配给列以生成序列号。

$query = "INSERT INTO用户(ID ,Facebook_id ,First_name ) VALUES (NULL, :xxxxx, :xxxxxxx)";

于 2013-06-04T20:22:45.793 回答