Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/235.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错误对象无法转换为字符串_Php_Mysql_Error Handling_Type Conversion - Fatal编程技术网

类的PHP错误对象无法转换为字符串

类的PHP错误对象无法转换为字符串,php,mysql,error-handling,type-conversion,Php,Mysql,Error Handling,Type Conversion,我试图创建一个连接到mysql数据库并将数据插入数据库的PHP文件。我发现以下错误: !!可捕获的致命错误:类foo_mysqli的对象无法在中转换为字符串!注意:第21行的C:\wamp\www\final\u kk.php中的未定义变量:host !!可捕获的致命错误:类foo_mysqli的对象无法转换为第21行C:\wamp\www\final_kk.php中的字符串 第21行是try内部的第一行。任何帮助都将不胜感激。谢谢 <?php class foo_mysqli exte

我试图创建一个连接到mysql数据库并将数据插入数据库的PHP文件。我发现以下错误:

!!可捕获的致命错误:类foo_mysqli的对象无法在中转换为字符串!注意:第21行的C:\wamp\www\final\u kk.php中的未定义变量:host

!!可捕获的致命错误:类foo_mysqli的对象无法转换为第21行C:\wamp\www\final_kk.php中的字符串

第21行是try内部的第一行。任何帮助都将不胜感激。谢谢

<?php

class foo_mysqli extends mysqli {
    public function __construct($host, $user, $pass, $db) {
        parent::__construct($host, $user, $pass, $db);

        if (mysqli_connect_error()) {
            die('Connect Error (' . mysqli_connect_errno() . ') '
                    . mysqli_connect_error());
        }
    }
}

$db = new foo_mysqli('localhost', 'root', '', 'users');

echo 'Success... ' . $db->host_info . "\n";

try {
            $conn = new PDO("mysql:host=$host;dbname=$db;username=$user;password=$pass", $user, $pass);


            // set the PDO error mode to exception
            $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);



            $sql = "INSERT INTO users (fname, lname,email,username,password,SSN) VALUES ('$fname', '$lname', '$email', '$uname', '$password', '$ssn')";


            // use exec() because no results are returned
            $conn->exec($sql);
            echo "New record created successfully";
            }

        catch(PDOException $e)
            {

            echo $sql . "<br>" . $e->getMessage();
            }

    $db->close();
    ?>
好的……我根据注释做了一些更改,现在我的代码如下所示:

<?php

class foo_mysqli extends mysqli {
    public function __construct($host, $user, $pass, $db) {
        parent::__construct($host, $user, $pass, $db);

        if (mysqli_connect_error()) {
            die('Connect Error (' . mysqli_connect_errno() . ') '
                    . mysqli_connect_error());
        }
    }
}

$db = new foo_mysqli('localhost', 'root', '', 'users');

echo 'Success... ' . $db->host_info . "\n";
settype($host, "string"); 
settype($user, "string");   
settype($pass, "string");    
try {
            $conn = new PDO("mysql:host=$host;dbname=$db, $user, $pass");


            // set the PDO error mode to exception
            $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);



            $sql = "INSERT INTO users (fname, lname,email,username,password,SSN) VALUES ('$fname', '$lname', '$email', '$uname', '$password', '$ssn')";


            // use exec() because no results are returned
            $conn->exec($sql);
            echo "New record created successfully";
            }

        catch(PDOException $e)
            {

            echo $sql . "<br>" . $e->getMessage();
            }

$db->close();
?>
这消除了我的一个错误,但我仍然

!!可捕获的致命错误:在第33行的C:\wamp\www\final\u kk.php中,类foo\u mysqli的对象无法转换为字符串

请帮助…我做错了什么?

您正在将$db设置为此行中foo_mysqli对象的实例:

$db = new foo_mysqli('localhost', 'root', '', 'users');
后来

$conn = new PDO("mysql:host=$host;dbname=$db;username=$user;password=$pass", $user, $pass);
您正在使用$db作为数据库名称。它包含在一个双引号字符串中,因此PHP将尝试对其进行插值,并在PDO连接字符串中替换一个字符串。因为$db现在是一个对象,所以它失败了

现在还不清楚为什么要在以后使用PDO对象时设置一个扩展MySQLi的对象

此外,您还没有在设置PDO连接的范围内定义$host,因此PHP将其报告为未定义

由于您知道主机和数据库的名称,因此可以执行以下操作:

    $conn = new PDO("mysql:host=localhost;dbname=users;", $user, $pass);

不是你的解决方案,而是一个提示,删除它;用户名=$user;password=$pass来自您的pdo构造函数,它不是必需的$db=new foo_mysqli…稍后…$conn=new PDO…dbname=$db;…-在创建$conn时,可以在双引号字符串中使用$db变量,但$db变量是一个foo_mysqli对象,它没有。