嘿所有我目前在插入php文件时遇到问题
我有一个表单..用户输入详细信息...我的表单..事件名称,事件日期和位置 基本上是有效的一点 是 首先,我想在2个表中添加一个条目:事件和结果
将条目添加到事件中没有问题
但它没有在“结果”中添加相同的条目
事件表包含以下列:事件ID,事件名称,事件日期和位置
结果表包含:活动ID,会员ID,活动名称,分数和地点
事件ID是自动增量
所以它会自动为其分配ID
并将其应用于两个表
事件ID中的自动增量
工作的位是
将条目插入事件表
但因为事件表和结果表都有“事件名称
我希望这个php完全插入事件表的详细信息
但同时,只需将eventname插入结果表
即可但事件中的EventID必须与结果中的EventID生成的数字相同..
以下是我的代码:所有帮助真的很感激!!!
<?
$pdo = new PDO('mysql:host=localhost;dbname=clubresults', 'root', '12345678');
#Set Error Mode to ERRMODE_EXCEPTION.
$pdo->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$query = $pdo->query('SELECT EventID, EventName, EventDate, Location from events');
$rowset = array();
if ($query) {
while ($row = $query->fetch(PDO::FETCH_ASSOC)) {
// Build array of rows
$rowset[] = $row;
}
// Output header first
$headrow = $rowset[0];
print("<table border=\"1\">\n<tr>\n");
// Use $rowset[0] to write the table heading
foreach ($headrow as $col => $val) {
printf("<th>%s</th>\n", $col);
}
print("</tr>");
// Then output table rows.
// Outer loop iterates over row
foreach ($rowset as $row) {
print("<tr>");
// Inner loop iterates over columns using $col => $val
foreach ($row as $col => $val) {
// We don't know your column names, but substitute the first column (the ID) for FIRSTCOL here
printf("<td><a href=\"adminlistresults.php?EventID=%s\">%s</a></td>\n", $row['EventID'],$val);
}
print("</tr>");
}
}
print("</table>");
?>
</form>
</div>
<?
$pdo = new PDO('mysql:host=localhost;dbname=clubresults', 'root', '12345678');
#Set Error Mode to ERRMODE_EXCEPTION.
$pdo->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$stmt=$pdo->prepare('INSERT INTO events (EventName, EventDate, Location)
VALUES (:EventName, :EventDate, :Location)');
$stmt->bindValue(':EventName', $_POST['EventName']);
$stmt->bindValue(':EventDate', $_POST['EventDate']);
$stmt->bindValue(':Location', $_POST['Location']);
$stmt->execute();
?>
<?
$int_event_id = $_GET["EventID"];
if((int)$int_event_id)
{
$stmt=$pdo->prepare('INSERT INTO results (EventName, EventID)
VALUES (:EventResultsName, $int_event_id)');
$stmt->bindValue(':EventName', $_POST['EventResultsName']);
$stmt->execute();
}
?>
答案 0 :(得分:1)
如果插件始终按顺序进行,我会使用$pdo->lastInsertId()
(请参阅:http://www.php.net/manual/en/pdo.lastinsertid.php)
所以,我认为这一行是错误的:
$int_event_id = $_GET["EventID"];
我会这样写:
<?
$stmt = $pdo->prepare('
INSERT INTO results (EventName, EventID)
VALUES (:EventResultsName, :EventId)
');
$stmt->bindValue(':EventName', $_POST['EventResultsName']);
$stmt->bindValue(':EventId', $pdo->lastInsertId());
$stmt->execute();
?>
请注意,这假设在插入事件后立即插入结果。
你可以使用MySQL的原生last_insert_id()
函数在没有绑定变量的情况下做同样的事情,如下所示:
<?
$stmt = $pdo->prepare('
INSERT INTO results (EventName, EventID)
VALUES (:EventResultsName, last_insert_id())
');
$stmt->bindValue(':EventName', $_POST['EventResultsName']);
$stmt->execute();
?>
然而,这比前一个例子更不便携。但是,pdo的lastInsertId()
也不完全与RDBMS无关(参见文档),所以如果你想要定位另一个RDBMS,你必须修复这段代码
答案 1 :(得分:0)
假设Event
实体代表一个事件,Result
实体代表特定成员的事件结果。因此Event
- &gt;之间存在1&gt; n关系。 Result
这意味着,有时您会收到需要插入Event
和Result
数据的请求,而其他人只会有Result
个数据。在后一种情况下,您将能够从请求_GET[EventId]
获取EventId。
在第一种情况下,您将不会设置此EventId
,并且由于您正在执行基于检查if((int)$int_event_id)
的第二个插入内容,因此永远不会插入Result
。
您应该做的第一件事是检查是否_GET["EventId"]
isset 。如果不是,则您需要同时插入Event
和Result
。在这种情况下,EventId
将从最后一个插入的语句中获取,如下所示:
$pdo->lastInsertId()
如果`_GET [“EventId”] isset ,你应该只进行第二次插入。