MySQL-Neden LAST_INSERT_ID () benim için çalışmıyor?

10 Cevap php

Ben aşağıdaki kodu vardır:

  public function createNewGuide($userID,$guideName)
  {
    $sql =" INSERT INTO myTable(name, updated) 
            VALUES ('$guideName', 'NOW()')";

    //Process query
    $this->query($sql); // This inserts the new row
    $this->query('LAST_INSERT_ID()'); // This throws an error

    return $this->query_result;
  }

Benim sorgu işlevi, bu gibi görünüyor:

  private function query($sql) 
  {
      $this->query_result = mysql_query($sql, $this->conn)
        or die("Unable to query local database <b>". mysql_error()."</b><br>$sql");   
  } 

Ben şu hatayı alıyorum:

MySQL Database Error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'LAST_INSERT_ID()'

Ben googled ve benzeri sorunları baktı, ama bir cevap buldum değil: (

Ben gerçekten bu kullanarak SQL yapmak istiyorum ben, PHP function mysql_insert_id() denemedim.

10 Cevap

Neden sadece PHP'nin mysql_insert_id kullanmak değil mi?

Ne olursa olsun ...

SELECT LAST_INSERT_ID()

Çalışması gerekir ... as long as you've an auto-increment column in the table.

SELECT unuttum:

"SELECT LAST_INSERT_ID()"

Bu SELECT olmadan çalışmaz:

SELECT LAST_INSERT_ID();

ya da sadece mysql_insert_id, bu php düzeyde aynı yapan bir php fonksiyonu bulunuyor kullanın. Masa kimlikleri BIGINT iseniz Ancak, ilk yöntemini kullanın.

Eğer aynı ortamda birden çok veritabanı bağlantıları varsa, her zaman bağlantı Identifier belirtmelidir.

mysql_insert_id php fonksiyonu durumda her zaman kullanarak aramalısınız mysql_insert_id( $link_id );

Eğer SELECT LAST_INSERT_ID( link_id ) kullanarak SQL sorgusu tarafından diyoruz.

Eğer mysql_* işlevleri kullanarak gibi, neden sadece mysql_insert_id function, instead of calling LAST_INSERT_ID() kendin kullanmak değil mi?


Still, the SQL error you are getting is probably because the SQL query you are sending to the server is this one :

LAST_INSERT_ID()

Bunun yerine, bu biri:

select LAST_INSERT_ID()

Eğer bir SQL sorgusu yapıyorsun, bir select olmalı ... seçmek ... bazı verileri.

Adamlar zaten SELECT önek eksik olduğunu yanıtladı var.

Arada, $guideName kaçtı değilse SQL enjeksiyon için berrak bir kapı vardır ... INSERT deyimi izlemek gerekir.

Hiçbir satır eklendiğinde ise LAST_INSERT_ID() sıfır döndürür.

Sen INSERT aslında başarılı olduğunu kontrol etmelisiniz. Her zaman geri dönüş mysql_query() değerini ve bir hata oluştu ise genellikle FALSE olduğu diğer fonksiyonlar, test edin.

$sql =" INSERT INTO myTable(name, updated) 
        VALUES ('$guideName', 'NOW()')";

if ($this->query($sql) === FALSE) {
  die(mysql_error());
}

if (($result = $this->query("SELECT LAST_INSERT_ID()")) === FALSE) {
  die(mysql_error()); 
}

if (($row = mysql_fetch_array($result)) === FALSE) {
  die(mysql_error()); 
}

$id = $row[0];
SELECT LAST_INSERT_ID();

Ben olsaydım. Ben ekleme / select last_insert_id php önce, ilk komut satırından veya sorgu tarayıcı işe almak istiyorum. En azından, bu en azından onaylamak veya doğru sql sözdizimi inkar edecektir.

Sana mysql_insert_id kullanmanız gerektiğini söylüyor kim katılıyorum, ama kullanmak istiyorsanız LAST_INSERT_ID, bunu kullanabilirsiniz:

function getLastInsertId($db_connection)
{
   $result = 0;

   if($query_result = mysql_query("SELECT LAST_INSERT_ID();", $db_connection))
   {
      $temp = mysql_fetch_row($query_result);
      $result = $temp[0];   
   }

   return $result;   
}

Ben masa datetime / timestamp sütun ve sorgu etti yerine NOW() varchar değeri datetime görmek düşünüyorum değer, böylece SQL query getirisi olmalıdır false.

Sorgu dönüş false son (her zaman mevcut bir bağlantı için) id takılı almazsınız eğer.