0

我有一个用 HTML 编写的网页。我有一个使用 MySQL 查询的数据库填充的下拉列表:

<SELECT NAME = "Participant" STYLE = "WIDTH: 187" TITLE="Begin typing participant last name for fast searching." required>
<OPTION SELECTED VALUE = "">Select Participant...</OPTION>
<?PHP
    $allParticipants = getall_participants();
    foreach($allParticipants as &$value) {
        $dt = date('Y-m-d'); 
        $val = $value->get_id();
        $optval = $dt.$val;
        echo "<OPTION VALUE='",$optval,"'>";
        echo $value->get_first_name()," ",$value->get_last_name();
        echo "</OPTION>";
    }
?>
</SELECT>

getall_participants() 看起来像:

function getall_participants () {
connect();
$query = "SELECT * FROM dbParticipants ORDER BY last_name";
$result = mysql_query ($query);
$theParticipant = array();
while ($result_row = mysql_fetch_assoc($result)) {
    $theParticipant = new Participant($result_row['last_name'], 
                      $result_row['first_name'], $result_row['address']);
    $theParticipants[] = $theParticipant;
}
mysql_close();
return $theParticipants;
}

在同一页面上,我有一个由另一个数据库预先填写的文本框:

<?php
    $dt = date('Y-m-d'); 
    $participants = getall_dbParticipantEntry_byDate($dt);
    foreach($participants as &$value) {
        $a = $a.$value.", ";
    }
    echo "<INPUT TYPE='text' NAME='Participants' STYLE='WIDTH:50px;' TITLE='Participants' ";
    echo "VALUE='[", $a.' ', "]'/>";
?>

那 getall_dbParticipantEntry_byDate($date) 看起来像:

function getall_dbParticipantEntry_byDate($date) {
connect();
$query = 'SELECT * FROM dbParticipantEntry WHERE date = "'.$date.'"';
$result = mysql_query ($query);
$theParticipantEntry = array();
while ($result_row = mysql_fetch_assoc($result)) {
    $theParticipantEntry = new ParticipantEntry($result_row['date'], $result_row['id'], $result_row['call_time'],
    $result_row['result'], $result_row['notes']);
    $theParticipantEntries[] = $theParticipantEntry->get_id();
}
mysql_close();
return $theParticipantEntries;
}

然而,虽然这两个函数单独工作都很好,但当它们都在同一个网页上时(就像我的意思一样),只有第一个运行的函数。我通过切换它们来测试这一点。他们都完成了指定的任务,但只有在页面上单独时。我怎样才能让它们都运行并填充各自的字段?

非常感谢。

4

2 回答 2

1

尝试以下顺序:

  1. 连接到 mySQL 服务器

  2. 做任务1

  3. 执行任务 2

  4. 关闭连接

对我来说,在执行 task2 之前,您似乎已经关闭了 mysqlconnection。

编辑:

也许你可以那样做?

function f1 ()
{
    $res = mysql_connect(...);

    // .. do some queries ..
    mysql_query($sql, $res); 

    mysql_close($res ) 
}

function f2 ()
{
    $res = mysql_connect(...);

    // .. do some queries ..
    mysql_query($sql, $res); 

    mysql_close($res ) 
}

编辑:

来自 php.net:

使用多个链接连接到同一个数据库(使用相同的用户名)时要小心。除非您在 mysql_connect() 中明确指定创建新链接,否则它将返回一个已经打开的链接。如果它会被 mysql_close() 关闭,它也会(显然)关闭另一个连接,因为链接是相同的。解决这个问题有很多麻烦,因为在 <=4.3.6 中有一个错误没有关闭连接,但是在补丁到 >=4.3.7 之后,我所有的应用程序都因为一个脚本而崩溃了这个。

于 2012-04-06T23:37:05.620 回答
0

你在同一个连接上运行它们。您需要存储从 mysql_connect 返回的资源 id 并将其传递给每个 mysql 方法(每个方法都使用它自己的相关资源)。

也就是说,我认为是时候:

  1. 转向更现代的东西,比如 Mysqli 或 PDO 扩展。更好的API
  2. 在连接管理上使用某种抽象,最好是每个连接一个数据库管理类的实例。网络上有大量示例,提供此类说明超出了本网站的范围。
于 2012-04-06T23:34:24.247 回答