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;
}

ただし、これらの関数は両方とも個別に正常に機能しますが、両方が同じWebページ上にある場合(私が意図したように)、最初に実行される関数のみが実行されます。私はそれらを切り替えてこれをテストしました。どちらも指定されたタスクを完了しますが、ページ上で1人の場合のみです。どうすればそれらを実行してそれぞれのフィールドに入力させることができますか?

本当にありがとう。

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. 接続管理に何らかの抽象化を使用します。できれば、接続ごとにDB管理クラスのインスタンスを1つ使用します。ウェブ上にはたくさんの例があり、そのような指示を提供することはこのサイトの範囲をはるかに超えています。
于 2012-04-06T23:34:24.247 に答える