2016-04-12 43 views
0

Etrafa baktım ve çözümler denedim, ama nedense bu çalışmıyor. Birincil olarak arttırma anahtarı olan bir albums_id ile upcoming_albums için bir tablom var. Benim upcoming_albums_tracks tablosumda, yeni bir albüm oluşturduğumda albums_id'inin albums_id'deki ile aynı değere sahip olmasını istiyorum. İşte SQL PHP Başka bir tablonun birincil anahtarını temel alarak bir yabancı anahtarı nasıl güncellerim?

benim php sınıf dosyası

public function create ($title, $content, $date, $price){ 

$db = Dbclass::getDB(); 
$query = "INSERT INTO upcoming_albums (albums_title, albums_content, albums_date, albums_price, albums_img_path) 
      VALUES (:title, :content, :date, :price, :path)"; 

$statement = $db->prepare($query); 
$statement->bindParam(':title', $title, PDO::PARAM_STR, 50); 
$statement->bindParam(':content', $content); 
$statement->bindParam(':date', $date); 
$statement->bindParam(':price', $price, PDO::PARAM_STR, 10); 
$statement->bindValue(':path', $this->target_path, PDO::PARAM_STR); 

$statement->execute(); 

$query = "UPDATE upcoming_albums_tracks 
      SET albums_id = upcoming_albums.albums_id 
      FROM upcoming_albums_tracks 
      WHERE upcoming_albums_tracks.albums_title = upcoming_albums.albums_title"; 

$statement = $db->prepare($query); 

$statement->execute(); 

} albüm oluşturma

gayet güzel çalışıyor yöntem, ama upcoming_albums_tracks tablonun albums_id olması gerekiyordu değere NULL dan değiştirmez .

İşte bir görüntünün görüntüsü.

upcoming_albums tablosu:

enter image description here

upcoming_albums_tracks tablo (Ben değil NULL aynı olması albums_id gerek)

enter image description here

GÜNCELLEME Bu takmadan kolları benim yöntemidir izler. Her albümde birden fazla parça olduğunu unutmayın, bu yüzden önce benim yaratma yöntemim çağrılır ve daha sonra foreach parçası eklenir, aşağıdaki yöntemi çalıştırırım. sorun artık hiçbir şey takılı alır geçerli:

public function createTrack ($title, $track, $index) { 

     $db = Dbclass::getDB(); 
     $lastInsertId = $db->lastInsertId();  

     $query = "INSERT INTO upcoming_albums_tracks (albums_id, albums_title, albums_track, albums_track_path, albums_track_file) 
        VALUES (" . $lastInsertId . " :title, :track, :path, :file_name)"; 

     $statement = $db->prepare($query); 
     $statement->bindParam(':title', $title, PDO::PARAM_STR, 50); 
     $statement->bindParam(':track', $track, PDO::PARAM_STR, 50); 
     $statement->bindValue(':path', $this->tracks[$index]['target_path'], PDO::PARAM_STR); 
     $statement->bindValue(':file_name', $this->tracks[$index]['file_name'], PDO::PARAM_STR); 

     $statement->execute(); 

    } 

garip bölüm I $ lastInsertId echo çalışırsanız, bana doğru numarayı sağlamasıdır.

+0

, temelde bu kimliğini almak gerekir deneyin son eklenen kaydı ve güncellemeyi yapmak için kullanın. – Erick

cevap

1

bir göz atın ve kaydı eklediğinizde bu

$lastInsertId = $db->lastInsertId(); 

$query = "UPDATE upcoming_albums_tracks SET albums_id = $lastInsertId FROM upcoming_albums_tracks WHERE upcoming_albums_tracks.albums_title = upcoming_albums.albums_title"; 
+0

içinde verilen nesne Sorunun güncel bölümüne bakın. Tavsiyeni ekledim, ama artık hiç parça parça tablosu içinde hiçbir şey yaratılmıyor. –

+0

Bir virgül unuttunuz, D'oh !! –

+0

Seni en iyi cevap olarak seçtim. Diğer cevaplar harikaydı, ama bana bir örnek atıfta bulunmak yerine bu özel problem için belirli bir cevap verdiğiniz için teşekkür ederim. –

1

İhtiyacınız olan şey, eklenen son kaydın kimliğini almaktır. MySQL bunu başarmak için, kullanabilirsiniz:

$last_id = mysqli_insert_id($conn); 

bu enter link description here

+0

Bunu denedi: $ conn = new PDO ("mysql: host = localhost; dbname = muzy", "root", ""); $ albums_id = mysqli_insert_id ($ conn); $ query = "INSERT INTO upcoming_albums_tracks (albums_id) VALUES (". $ albums_id. ")"; Bu hatayı aldım: mysqli_insert_id() parametre 1'in mysqli olmasını bekler, –