类的PHP错误对象无法转换为字符串
我试图创建一个连接到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错误对象无法转换为字符串,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
<?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对象,它没有。