Я пытаюсь создать файл PHP, который подключается к базе данных mysql и вставляет данные в базу данных. Я получаю эти ошибки:
(!) Исправляемая фатальная ошибка: объект класса foo_mysqli не может быть преобразован в строку в (!) Примечание: неопределенная переменная: хост в C: \ wamp \ www \ final_kk.php в строке 21
(!) Исправляемая фатальная ошибка: объект класса foo_mysqli не может быть преобразован в строку в C: \ wamp \ www \ final_kk.php в строке 21
Строка 21 — это первая строка внутри попытки. Любая помощь будет оценена. Спасибо!
<?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();
?>
Это избавило меня от одной из моих ошибок, однако я все еще получаю
(!) Исправляемая фатальная ошибка: объект класса foo_mysqli не может быть преобразован в строку в C: \ wamp \ www \ final_kk.php в строке 33
пожалуйста помогите … что я делаю не так?
Вы устанавливаете $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
теперь объект, он терпит неудачу.
Непонятно, почему вы настраиваете объект, который расширяет MySQLi, когда вы все равно позже используете объект PDO.
Кроме того, вы не определили $host
в области, где вы настраиваете ваше соединение PDO, так что PHP сообщает, что это не определено.
Поскольку вы знаете, что такое имена хоста и базы данных, вы можете просто сделать это:
$conn = new PDO("mysql:host=localhost;dbname=users;", $user, $pass);
Других решений пока нет …