【问题标题】:PHP Error Object of Class Could Not Be Converted to String类的 PHP 错误对象无法转换为字符串
【发布时间】:2015-02-05 10:42:45
【问题描述】:

我正在尝试创建一个连接到 mysql 数据库并将数据插入数据库的 PHP 文件。我收到这些错误:

(!) 可捕获的致命错误:类 foo_mysqli 的对象无法转换为 (!) 中的字符串 注意:未定义变量:C:\wamp\www\final_kk.php 第 21 行中的主机

(!) 可捕获的致命错误:类 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();
    ?>

好的....我根据 cmets 做了一些更改,现在我的代码如下所示:

<?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();
?>

这消除了我的一个错误,但我仍然得到

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

请帮忙...我做错了什么?

【问题讨论】:

  • 不是你的解决方案,而是一个提示,从你的 pdo 构造函数中删除 ;username=$user;password=$pass,它不需要!
  • $db = new foo_mysqli ...稍后... $conn = new PDO("…dbname=$db;…" — 创建$conn 时,您在双引号字符串中使用$db 变量,但$db 变量是foo_mysqli 对象没有__toString()

标签: php mysql error-handling type-conversion


【解决方案1】:

您在这一行中将$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);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-07-25
    • 2016-12-02
    • 2015-05-15
    • 1970-01-01
    • 2013-07-03
    • 2014-11-21
    • 2012-07-12
    • 1970-01-01
    相关资源
    最近更新 更多