将所有mysql_ *函数切换为mysqli_ *函数会导致警告错误

时间:2018-01-17 07:52:20

标签: php mysql mysqli php-7

我目前正在将所有mysql_ *函数切换到mysqli_ *函数,我收到以下错误。

 PHP Warning: mysqli_connect(): (HY000/1040): Too many connections in

 PHP Warning: mysqli_query() expects parameter 1 to be mysqli, boolean given in 

 PHP Warning: mysqli_error() expects parameter 1 to be mysqli, boolean 

在config.php中:

            $dbuser = "xxx";
            $dbpass = "xxx";
            $dbhost = "xxxx";
            $dbname = "xxxxxx";
            $connection = mysqli_connect($dbhost, $dbuser, $dbpass) or die("could not connect to mysql");
            if($connection){
                echo "\n Database connected ....\n\n";
            }
            mysqli_select_db($connection,$dbname) or die(mysqli_error($connection));

在other.php中

require_once 'Lib/config.php';

 class Mutex {

    protected $connection;
    public function __construct()
    {
    global $dbuser,$dbpass,$dbname,$dbhost; // globally declaring the config variables
    $this->connection = mysqli_connect($dbhost, $dbuser, $dbpass,$dbname);   
    if (mysqli_connect_errno())
    {
      echo "Failed to connect to MySQL: " . mysqli_connect_error();
      //you need to exit the script, if there is an error
        exit();
    }
    }



    public function Prog($pack = null) {

        if(isset($pack) && $pack != "") {
            $sql_qry    = "SELECT id from xxxx WHERE package like '" . addslashes($pack) . "'";
            showSqlQuery($sql_qry);
            $result     = mysqli_query($this->connection,$sql_qry)or die(mysqli_error($this->connection));
            if($result && mysqli_num_rows($result)>0) {
                $row    = mysqli_fetch_assoc($result);
                if(!empty($row)) {
                    return "Exists";
                }
            }
            return "NotExists";
        }
        return "InvalidProcess";
    }
}

尝试了很多解决方案,但没有一个能为我工作

如上所示获取错误。 请帮我解决这个问题..

提前致谢。

2 个答案:

答案 0 :(得分:0)

不是复制(几乎)连接,而是可以尝试将db连接的引用作为参数传递给Mutex构造函数的方法

<?php
    /* lib/config.php */
    $dbhost =   'localhost';
    $dbuser =   'root'; 
    $dbpass =   'xxx'; 
    $dbname =   'xxx';
    $db =   new mysqli( $dbhost, $dbuser, $dbpass, $dbname );

?>

<?php

    include 'lib/config.php';

    class Mutex{
        private $connection;

        public function __construct( $dbo=object ){
            $this->connection=$dbo;
        }

        public function Prog($pack = null) {
            $result='InvalidProcess';
            if( !empty( $pack ) ) {

                $sql='select `id` from `xxxx` where `package` like ?';
                $stmt=$this->connection->prepare( $sql );
                if( $stmt ){

                    $var = '%'.$pack.'%';
                    $stmt->bind_param('s', $var );

                    $result=$stmt->execute();
                    if( $result && $stmt->num_rows > 0  ){

                        $stmt->store_result();
                        $stmt->bind_result( $id );

                        while( $stmt->fetch() ){/* do stuff perhaps */
                            echo $id;
                        }

                        $stmt->free_result();
                        $stmt->close();
                        $result='Exists';
                    }
                }
            }
            return $result;
        }



    $pack='banana';

    $mutex=new Mutex( $db );
    $mutex->Prog( $pack );

?>

答案 1 :(得分:0)

我认为您的数据库配置存在一些问题。

将以下config.php文件代码替换为下面的内容。

$dbuser = "xxx";
$dbpass = "xxx";
$dbhost = "xxxx";
$dbname = "xxxxxx";
$connection = mysqli_connect($dbhost, $dbuser, $dbpass, $dbname);
// Check connection
if (mysqli_connect_errno())
{
    echo "Failed to connect to MySQL: " . mysqli_connect_error();
}