0

私はスクリプトに取り組んでおり、最後に挿入された ID を DB にエコーする必要がありますが、出力が得られません。

注: 以下のコードを実行すると、データが DB に挿入されますが、その後、最後に挿入された行の 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

クエリでは、長さゼロの文字列''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 に答える
0

ブール値であるexecute()の戻り値を読み取る必要があります。

それは間違っていると思います。それはあなたのリクエストにエラーがあることを意味します。

テーブル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

この行をブートストラップ コードの一番上に追加します

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 に答える