0

PHP ページで 2 種類の MySQL 接続を使用することは可能ですか?

現在、PHP には2 つの別個のファイルを介してアクセスされる$link = mysql_connectおよび接続があります。$mysqli = new mysqliinclude

どちらも MySQL データベースからデータを取得しますが、両方が同じ PHP ページにある場合、2 番目の接続は機能しません。

本当に明らかな何かが欠けていますか?

mysql

$link = mysql_connect("localhost", "root", "root", "abc");
if(!$link)
{
    die('There was a problem connection to the database.  Please contact your survey administrator.');
}

mysql_select_db("root");

$query = "SELECT * FROM tresults";
$result = mysql_query($query);
$total = mysql_num_rows($result);

$query1 = "SELECT * FROM trespondent";
$result1 = mysql_query($query1);
$total1 = mysql_num_rows($result1) - 1;

    $percent = number_format(($total * 100) / $total1);

mysql_close($link);

}

みずい

$mysqli = new mysqli("localhost", "root", "root", "abc");


/* check connection */
if (mysqli_connect_errno()) {
printf("Connect failed: %s\n", mysqli_connect_error());
exit();
}

$a = 'q';
$aa = 1;
$r = "$a$aa";
$q = 55;

while($aa <= $q){
$query  .= "SELECT COUNT(". $r .") as Responses, (SELECT COUNT(". $r .") FROM tresults WHERE ". $r ." = -1 ) as NA, (SELECT COUNT(". $r .") FROM tresults WHERE ". $r ." = 1 ) as SD, (SELECT COUNT(". $r .") FROM tresults WHERE ". $r ." = 2 ) as D, (SELECT COUNT(". $r .") FROM tresults WHERE ". $r ." = 3 ) as A, (SELECT COUNT(". $r .") FROM tresults WHERE ". $r ." = 4 ) as SA, ((SELECT COUNT(". $r .") FROM tresults WHERE ". $r ." = 3 ) + (SELECT COUNT(". $r .") FROM tresults WHERE ". $r ." = 4)) as Pos, ((SELECT COUNT(". $r .") FROM tresults WHERE ". $r ." = 1 ) + (SELECT COUNT(". $r .") FROM tresults WHERE ". $r ." = 2)) as Neg, (SELECT COUNT(". $r .") FROM tresults WHERE ". $r ." >= 1) AS Total, ( ((SELECT COUNT(". $r .") FROM tresults WHERE ". $r ." = 3 ) + (SELECT COUNT(". $r .") FROM tresults WHERE ". $r ." = 4)) / (SELECT COUNT(". $r .") FROM tresults WHERE ". $r ." >= -1)  ) *100 AS percentage FROM tresults;";
$aa = $aa + 1;
$r = "$a$aa";

注: コードの残りの部分とクローズは、次を使用して PHP ページ内で処理されます。$mysqli->close();

if ($mysqli->multi_query($query)) {
                                $n = 0;
                                do {
                                    /* store first result set */

                                    if ($result = $mysqli->store_result()) {
                                        $i = 1;
                                        $p = 1;

                                        while ($row = $result->fetch_row()) {
                                            // print_r($row);
                                            $n++;
4

3 に答える 3

1

Ok。何が問題なのかわからないので、Windowsで状況を再現しようとしましたが、同じスクリプトで両方の接続を使用してコードが機能しました。

これが私のテーブルです。

ここに画像の説明を入力

これが私が実行したコードです

<?php

/**
 *     I created a table in test (database). The table has a simple name and
 *     age. 
 *
 */

$mysql = mysql_connect('localhost','root','');
$mysqli = mysqli_connect('localhost','root','');

if (!$mysql || !$mysqli) {
   die( 'Sorry, one of them the is not working');
} else {
   echo 'Both connections are a success<hr>';
}

//Test the $mysql
echo '<h3>mysql_connect</h3>';
mysql_select_db('test',$mysql);
$query = 'SELECT * from names';
$results = mysql_query($query,$mysql);

$data1 = array();
while ($row = mysql_fetch_assoc($results)) {
   $data1[] = $row; 
}

mysql_close($mysql);

print_r($data1);

echo '<hr>';
echo '<h3>mysqli_connect</h3>';
//Test the $mysqli
mysqli_select_db($mysqli,'test');
$query2 = 'SELECT * from names';
$results2 = mysqli_query($mysqli,$query2);

$data2 = array();
while ($row = mysqli_fetch_assoc($results2)) {
   $data2[] = $row; 
}

print_r($data2);
mysqli_close($mysqli);
?>

ここに私の出力があります:

ここに画像の説明を入力

1 つのスクリプトで両方のタイプの接続を使用できました。それがあなたが求めていたものかどうかはわかりませんが、スクリプトに複数の接続があることがわかっている場合は、どれを使用するかをphpに伝えるので、おそらくうまくいきました。

PHP ページで 2 種類の MySQL 接続を使用することは可能ですか?

やった。あなたの質問から得られないことがない限り。

これがあなたの質問に答えているかどうかはわかりませんが、そうでない場合は喜んで削除します。ちなみに私はPDOを使っています。

于 2013-08-12T23:02:18.687 に答える
1

はい、できます。

<?php
error_reporting(-1);

$l1 = mysql_connect('127.0.0.1', 'webrunner', 'XXXXXXXXXXX');
mysql_select_db('iceline', $l1);
$l2 = new mysqli('127.0.0.1', 'webrunner', 'XXXXXXXXX', 'iceline' );

var_dump($l1, $l2);

var_dump( mysql_query("select sysdate() from dual", $l1));
var_dump($l2->query("select sysdate() from dual"));

「新しいリンクフラグ」を見ましたか?毎回新しい接続を設定する限り、同じ DB に複数の接続を持つことができます。

明らかに、コード構造は理想的とは言えません。

この回答は、@touch からの応答と衝突します。問題のあるコードについてさらに投稿した場合、これが役立つ場合があります。

于 2013-08-12T23:03:48.397 に答える
1

2 番目の接続を呼び出した後、最初の接続を閉じましたか?

mysql_close($link);

とはいえ、1 つのページで 2 つの異なる接続を使用するのはあまり良い例ではありません。そのように使用する特定の理由はありますか?

続きを読む:リンク

于 2013-08-12T22:25:56.027 に答える