Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 为什么在connect_error()不工作的情况下死亡?_Php_Mysql_Exception_Mysqli - Fatal编程技术网

Php 为什么在connect_error()不工作的情况下死亡?

Php 为什么在connect_error()不工作的情况下死亡?,php,mysql,exception,mysqli,Php,Mysql,Exception,Mysqli,主要问题: 如果没有连接到MySQL服务器,我试图在网页上打印错误。为此,我写了一个错误的数据库名$this->dbname='dbinds'(实际值为dbind)。但是,die语句没有执行。当我打开页面时,它根本不加载。它显示错误:本地主机页不工作。 我做错什么了吗 另一个问题: 我已经对异常处理代码块进行了注释。现在当我使用它时,它工作得很好。如果出现错误,将抛出异常。但是如果您看到,我已经在$this->abc=$this->con->prepare()下面编写了第二个异常抛出代码块语句。

主要问题:

如果没有连接到MySQL服务器,我试图在网页上打印错误。为此,我写了一个错误的数据库名
$this->dbname='dbinds'(实际值为dbind)。但是,die语句没有执行。当我打开页面时,它根本不加载。它显示错误:本地主机页不工作。
我做错什么了吗

另一个问题: 我已经对异常处理代码块进行了注释。现在当我使用它时,它工作得很好。如果出现错误,将抛出异常。但是如果您看到,我已经在
$this->abc=$this->con->prepare()下面编写了第二个异常抛出代码块语句。但是如果我在下面写这个
$this->abc->execute(),它就不起作用了

有没有办法为每个语句抛出异常?(例如,准备、绑定和执行)

这是我的密码:

<?php
class Database
{
    private $servername;
    private $username;
    private $password;
    private $dbname;
    public $abc;
    public $con;
    public function __construct()
    {
       // ini_set('display_errors',1); error_reporting(E_ALL);
        $this->servername = 'localhost';
        $this->username = 'root';
        $this->password = '';
        $this->dbname = 'dbinds';
        $this->con = mysqli_connect($this->servername, $this->username, $this->password, $this->dbname);
        if($this->con->connect_error){
            die("Something: ".connect_error());
        }
        /*if(!$this->con) {
           throw new Exception("Connection can't be made");
        }*/
        return $this->con;
    }

    public function insert_data($emp_name, $emp_dept, $emp_salary)
    {
        $this->abc=$this->con->prepare("INSERT INTO table1(name, email, password) VALUES(?, ?, ?)");
        //FOLLOWING IF BLOCK
        /*if(!$this->abc) {
            throw new Exception("Couldn't insert data");
        }*/
        $this->abc->bind_param("ssi", $emp_name, $emp_dept, $emp_salary);
        $this->abc->execute();

    }
}
?>
<?php
$conobj=new Database();
$query=$conobj->insert_data("vvsdf", "vsomeone", 3445);
/*try{
    $conobj=new Database();
    $query=$conobj->insert_data("vvsdf", "vsomeone", 3445);

} catch (Exception $e ) {
    //echo "Service unavailable";
    echo "message: " . $e->getMessage();   // not in live code obviously...
   // echo $e;
    exit;
}*/
?>

您需要决定是使用程序还是

但是,您仍然可以将if条件更改为:

if (!$this->con) {
   die(mysqli_connect_error());
}

它应该会起作用。您还可以看到,

connect\u error()
没有回显,因为我已经为connect?编写了过程函数。此外,它可以工作,但在将if语句中的条件更改为您的条件之后。为什么会这样?因为我检查mysqli_connect是否返回连接对象,如果没有,则表示有错误,所以我显示了它。我也这样做了。但它不起作用。是的,我知道这会起作用。你能谈谈第二个问题吗?