2015-08-13 16 views
0

我試圖將完全相同的信息發送到兩個不同的表。我讀到這不能用一個INSERT查詢完成,所以我嘗試了這樣做。試圖通過一個查詢獲取兩個INSERT到兩個不同的數據庫表

$stmt2 = $con->prepare("INSERT INTO user_players (user_id, firstname, lastname, username, email) VALUES (?, ?, ?, ?, ?)"); 
    $stmt2 = $con->prepare("INSERT INTO drafted_players (user_id, firstname, lastname, username, email) VALUES (?, ?, ?, ?, ?)"); 

    if (false===$stmt2) { 
     // Check Errors for prepare 
     die('Add to user players prepare() failed: ' . htmlspecialchars($con->error)); 
    } 
    $stmt2->bind_param('issss', $shuffle_id, $shuffle_firstname, $shuffle_lastname, $shuffle_username, $shuffle_email); 

    foreach ($_POST['id'] as $i => $shuffle_id) { 
     $shuffle_firstname = $_POST['firstname'][$i]; 
     $shuffle_lastname = $_POST['lastname'][$i]; 
     $shuffle_username = $_POST['username'][$i]; 
     $shuffle_email = $_POST['email'][$i]; 
     $stmt2->execute() or 
      die('Add to user players execute() failed: ' . htmlspecialchars($stmt2->error)); 

只有第二個插件部分正在工作。我如何構造這個結構,以便INSERT的工作?

+1

但是,爲什麼?切勿存儲兩次相同的數據。 – jarlh

+0

它不會是兩次相同的數據。剛開始插入。但是,第一個查詢,我需要保存該信息的方式插入。第二個查詢被修改。 – Ralph

+1

難道你不能爲所有球員配一張桌嗎?或者是一個表示草擬的列還是其他? – jarlh

回答

1

您正在分配$stmt2兩次 - 如果您有兩個準備好的語句,則需要兩個變量來存儲它們。如果您將您的代碼更改爲:

$stmt1 = $con->prepare("INSERT INTO user_players (user_id, firstname, lastname, username, email) VALUES (?, ?, ?, ?, ?)"); 
$stmt2 = $con->prepare("INSERT INTO drafted_players (user_id, firstname, lastname, username, email) VALUES (?, ?, ?, ?, ?)"); 

if (false===$stmt1 || false===$stmt2) { 
    // Check Errors for prepare 
    die('Add to user players prepare() failed: ' . htmlspecialchars($con->error)); 
} 
$stmt1->bind_param('issss', $shuffle_id, $shuffle_firstname, $shuffle_lastname, $shuffle_username, $shuffle_email); 
$stmt2->bind_param('issss', $shuffle_id, $shuffle_firstname, $shuffle_lastname, $shuffle_username, $shuffle_email); 

foreach ($_POST['id'] as $i => $shuffle_id) { 
    $shuffle_firstname = $_POST['firstname'][$i]; 
    $shuffle_lastname = $_POST['lastname'][$i]; 
    $shuffle_username = $_POST['username'][$i]; 
    $shuffle_email = $_POST['email'][$i]; 
    $stmt1->execute() or 
     die('Add to user players execute() failed: ' . htmlspecialchars($stmt1->error)); 
    $stmt2->execute() or 
     die('Add to user players execute() failed: ' . htmlspecialchars($stmt2->error)); 

它應該工作。

+0

這大多工作。出於合理原因,姓氏不會發送給任何一方? – Ralph

+0

我不確定你想說什麼。你是說列名仍然是空的?如果是這樣,請仔細檢查表單(或者將數據發送到此PHP頁面的任何內容) - 可能它的拼寫有所不同,如「lastName」。 – Glorfindel

+0

一切拼寫正確。在添加額外查詢之前發送姓氏? – Ralph

0

您還可以在一個聲明中同時發送命令(最好用命名參數)

$statement = $con->prepare("INSERT INTO user_players (user_id, firstname, lastname, username, email) VALUES (:user_id, :firstname, :lastname, :username, :email); 
          INSERT INTO drafted_players (user_id, firstname, lastname, username, email) VALUES (:user_id, :firstname, :lastname, :username, :email);"); 

$statement->bindValue('user_id', $shuffle_id); 
... 
相關問題