1
我有兩個表是這樣的:表聯接SQL/PHP(CRUD)
[tblFacilityHrs] id uid title description
[tblFacilityHrsDateTimes] id owner_uid startEventDate endEventDate startTime endTime days recurrence finalDate
他們是一個一對多的關係,通過UID的方式:
我想加入表格,以便我只從tblFacilityHrsDateTimes獲取ID值(這樣,當我編輯表格時,第一個表tblFacilityHrs被UID編輯,tblFacilityHrsDateTimes通過ID編輯)。
我該如何加入表格以便可以用這種方式編輯它們?
事情是這樣的:
<?php
include('../config.php');
if (isset($_GET['uid'])) {
$uid = (int) $_GET['uid'];
$id = (int) $_GET['id'];
if (isset($_POST['submitted'])) {
foreach($_POST AS $key => $value) { $_POST[$key] = mysql_real_escape_string($value); }
//Query for tblFacilityHrs
$sql = "`title` = '{$_POST['title']}' , `description` = '{$_POST['description']}' WHERE `uid` = '$uid' ";
mysql_query($sql) or die(mysql_error());
//Query for tblFacilityHrsDateTimes
$sql2 = "`startEventDate` = '{$_POST['startEventDate']}' , `endEventDate` = '{$_POST['endEventDate']}' , `startTime` = '{$_POST['startTime']}', `endTime` = '{$_POST['endTime']}' , `days` = '{$_POST['days']}' , `recurrence` = '{$_POST['recurrence']} , `finalDate` = '{$_POST['finalDate']}' WHERE `id` = '$id' ";
mysql_query($sql2) or die(mysql_error());
echo (mysql_affected_rows()) ? "Edited row.<br />" : "Nothing changed. <br />";
echo "<a href='list.php'>Back</a>";
}
$row = mysql_fetch_array (mysql_query("SELECT * FROM `tblFacilityHrs` WHERE `uid` = '$uid'"));
$row2 = mysql_fetch_array(mysql_query("SELECT * FROM `tblFacilityHrsDateTimes` WHERE `id` = '$id'"));
?>
在我腦子裏,我想象中的表加入這樣的(但它不工作):
$result = mysql_query("SELECT uid, title, description FROM tblFacilityHrs LEFT JOIN tblFacilityHrsDateTimes ON tblFacilityHrs.uid = tblFacilityHrsDateTimes.owner_uid ORDER BY tblFacilityHrs.description") or trigger_error(mysql_error());
您的代碼易受SQL注入攻擊。你真的**應該使用準備好的語句,將你的變量作爲參數傳遞給你,這些參數不會被SQL評估。如果你不知道我在說什麼,或者如何解決它,請閱讀[Bobby Tables](http://bobby-tables.com)的故事。另外,如果沒有解釋「不起作用」是什麼,那麼您在帖子末尾提出的查詢「不起作用」。你有錯誤嗎?如果是這樣,那是什麼?如果不是,結果與你的期望有什麼不同? – eggyal
我準備在未來的聲明我還沒有到那一點。我一次只做一件事,以便調試。至於加入,如果我使用最後一個代碼塊,它只會顯示來自tblFacilityHrs的信息 - 像這樣:http://i.imgur.com/XP5Yj.png –
但是你的'SELECT'語句只選擇明確命名的三列來自'tblFacilityHrs' ...爲什麼你會期望結果集中的其他內容?或者我在這裏錯過了什麼? – eggyal