2012-05-07 69 views
1

我有兩個表是這樣的:MySQL的一次更新兩個不同的表(CRUD)

[tblFacilityHrs] id uid title description 

[tblFacilityHrsDateTimes] owner_uid startEventDate endEventDate startTime endTime days recurrence finalDate 

我加入表如下:

$result = mysql_query("SELECT * FROM tblFacilityHrs JOIN tblFacilityHrsDateTimes ON tblFacilityHrs.uid =tblFacilityHrsDateTimes.owner_uid") or trigger_error(mysql_error()); 

要顯示這兩個表我經歷每條記錄放在一張表中:

while($row = mysql_fetch_array($result)){ 
foreach($row AS $key => $value) { $row[$key] = stripslashes($value); } 
echo "<tr>"; 
echo "<td valign='top'>" . nl2br($row['title']) . "</td>"; 
echo "<td valign='top'>" . nl2br($row['description']) . "</td>"; 
echo "<td valign='top'>" . nl2br($row['startEventDate']) . "</td>"; 
echo "<td valign='top'>" . nl2br($row['endEventDate']) . "</td>"; 
echo "<td valign='top'>" . nl2br($row['startTime']) . "</td>";  
echo "<td valign='top'>" . nl2br($row['endTime']) . "</td>"; 
echo "<td valign='top'>" . nl2br($row['days']) . "</td>";  
echo "<td valign='top'>" . nl2br($row['recurrence']) . "</td>"; 
echo "<td valign='top'>" . nl2br($row['finalDate']) . "</td>"; 

我的問題是現在,我該如何編輯每條記錄?

在我的表,我通常會做此之下主頁:

僞代碼

echo "<td valign='top'><a href=edit.php?id={$row['id']}>Edit</a></td><td><a href=delete.php?id={$row['id']}>Delete</a></td> "; 

然後我的編輯頁面上,我會做這樣的事情:

僞代碼

if (isset($_GET['id'])) { 
    $id = (int) $_GET['id']; 
    if (isset($_POST['submitted'])) { 
    foreach($_POST AS $key => $value) { $_POST[$key] = mysql_real_escape_string($value); } 
    $sql = "`title` = '{$_POST['title']}' , `description` = '{$_POST['description']}' WHERE `id` = '$id' "; 
    mysql_query($sql) or die(mysql_error()); 
    echo (mysql_affected_rows()) ? "Edited row.<br />" : "Nothing changed. <br />"; 
    echo "<a href='list.php'>Back</a>"; 

這些表格在加入後如何工作?我如何編輯它們兩個?

+0

我不知道它是如何工作的,因爲你賦給'$ sql'的值不是一個有效的查詢。錯誤的複製粘貼? – Romain

+0

如果我只有一張桌子,那麼最後兩個代碼塊就不會工作。 –

+0

好,你擔心'mysql_real_escape',但如果你需要佔位符(即「我應該把什麼我要求」),然後在片段中適當地標記它們。目前這令人困惑。 – Romain

回答

3

我覺得你應該更新每個表seperatly;首先是主表,然後是細節表,然後重新綁定你的數據視圖

+1

哇。在併發情況下會發生什麼情況(例如,當另一個客戶端可能會在第一次和第二次更新之間從表中讀取)? – Romain

+4

@Romain您可以在一個交易中執行更新,這將會尊重操作的原子性 –

+0

@watcher是的,這正是我想要的 - 這是關於交易中答案的簡單介紹。 – Romain