0

PHP页面上是否可以有两种类型的MySQL连接?

目前在 PHP 中有一个$link = mysql_connect和一个$mysqli = new mysqli通过两个单独的文件访问的连接。include

它们都从 MySQL 数据库中提取数据,但如果它们都在同一个 PHP 页面中,则第二个连接不起作用。

我错过了一些非常明显的东西吗?

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

$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

你在调用第二个连接后关闭了第一个连接吗?

mysql_close($link);

然而,在一页上使用 2 个不同的连接并不是一个很好的例子。你有这样使用它的特定理由吗?

阅读更多:链接

于 2013-08-12T22:25:56.027 回答
1

行。我不太确定您遇到了什么问题,所以我尝试在 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);
?>

这是我的输出:

在此处输入图像描述

我能够在一个脚本中使用这两种类型的连接。我不知道这是否是您要问的,但我的可能有效,因为当我知道脚本中有多个连接时,我会告诉 php 使用哪一个。

PHP页面上是否可以有两种类型的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"));

你看过“新链接标志”吗?只要您每次都设置新连接,您就可以与同一个数据库建立多个连接。

显然代码结构不太理想。

这个答案与@touch 的回复相冲突。如果您发布了有关错误代码的更多信息,这可能会有所帮助。

于 2013-08-12T23:03:48.397 回答