2013-04-01 5 views
1

Я использую PHP для сценариев на стороне сервера и сервера mysql для базы данных. Если я использую mysql_insert_id(), тогда он дает «0», а использование LAST_INSERT_ID() вызывает ошибку «объект возвратил пустое описание» .Это ошибка, которую я вижу, когда я отлаживаю клиентскую сторону в объективе-C. Обозначение столбца таблицы My автоматически генерируется. Я не пропускаю идентификатор явно.Получить идентификатор последней вставленной строки в PHP

Ниже приведен PHP-код:

// Connect to our database 
    $db = Frapi_Database::getInstance(); 

    $sql = "INSERT INTO userTrip 
     (userId, fromLat, fromLon, fromLoc, fromPOI, 
     toLat, toLon, toLoc, toPOI, 
     tripFinished, isMatched, departureTime, createdAt) 
     values 
     (".$userId.",".$fromLat.",".$fromLon.", GeomFromText('POINT($fromLat $fromLon)')".",'".$fromPOI."',".$toLat."," 
      .$toLon.", GeomFromText('POINT($toLat $toLon)')".",'".$toPOI."',0,0,'". 
      $departureTime."','".date('Y-m-d H:i:s')."')"; 

    $stmt = $db->prepare($sql);   

    if (!$stmt->execute()) 
     throw new Frapi_Error('ERROR_INSERTING_RECORD'); 

    $lastId = LAST_INSERT_ID(); 
    $this->data['tripId'] = $lastId; 
    $db = null; 
+0

Вы пытались проверить, успешна ли ваша вставка? –

+0

Убедитесь, что запись вставлена ​​или у вас есть автоматически увеличиваемый первичный ключ, потому что mysql_insert_id() возвращает 0, если предыдущий запрос не генерирует значение AUTO_INCREMENT. – Arvind

ответ

4

Frapi Database простирается от PDO, так что вы бы использовать это:

$lastId = $db->lastInsertId(); 

Смотрите также: PDO::lastInsertId()

+0

спасибо @Jack. Я использовал '$ db-> lastInsertId()'. Это дает ценность. Но это неверная ценность. Я использую базу данных Frapi. Каждый раз, когда запускается 'insert action'in tester, он дает новый id, добавляя 4 к последнему, тогда как он должен добавить 1. Другое дело, что последний id в моей таблице равен 138, и он дал 201. – Geek

+0

@AkashPatel Откуда вы знаете это значение неверно? Введенный идентификатор может не увеличиваться ровно 1 раз. Это может привести к откатам транзакций и настройкам репликации мастер-мастера. –

+0

Он увеличивается на 1 в таблице. Я не знаю о настройках, которые вы сказали. Я найду причину. Еще раз спасибо. – Geek

0

вы ищете это?

, чтобы получить последнюю вставленную идентификатор

mysql_insert_id(); 

mysql_insert_id

2

Попробуйте (если вы используете mysqli):

$db->insert_id; 

Или (если вы используете PDO):

$db->lastInsertId(); 
0

Если у вашей таблицы есть АВТО ИНКРЕМЕН T колонки как UserID, emp_id, .. то вы можете использовать этот запрос, чтобы получить последнюю вставленную запись

SELECT * FROM table_name where UserID=(select MAX(UserID)from table_name) 

В PHP коде:

$con = mysqli_connect('localhost', 'userid', 'password', 'database_name'); 
if (!$con) { 
    die('Could not connect: ' . mysqli_error($con)); 
} 
$sql = "SELECT * FROM table_name where UserID=(select MAX(UserID)from table_name)"; 
$result = mysqli_query($con, $sql); 

Затем вы можете использовать неправдоподобные данные как ваше требование

Смежные вопросы