#php #mysql #pdo
#php #mysql #pdo
Вопрос:
Я пытаюсь использовать PDO для подключения к mysql, но когда я пытаюсь создать экземпляр PDO, это приводит к сбою кода. Я попытался поместить его в try and catch, но он по-прежнему нарушает код / я получаю страницу с надписью «Страница локального хоста не работает»
protected $conn;
$dsn = "mysql:host=localhost;dbname=Mydatabase";
$this->conn = new PDO($dsn, "admin", "test2016");
Если я попытаюсь подключиться к mysql следующим образом:
$conn = mysqli_connect("localhost", "admin", "test2016");
все работает нормально.
Я не уверен, почему новый PDO вызывает эту ошибку.
class Database {
protected $conn;
function __construct() {
$this->init();
}
function init(){
try{
$this->conn= $this->connectDB("localhost","Mydatabase","admin","test2016"); // the here
$this->conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
echo "Connected successfully";
}catch(PDOException $e){
echo "Connection failed: " . $e->getMessage();
}
}
function connectDB($servername,$database,$username,$password){
$dsn = "mysql:host=localhost;dbname=Mydatabase";
return new PDO($dsn, $username, $password);// i am not sure why new pdo is the cause of the problem
// $conn = mysqli_connect($servername, $username, $password);
//if (!$conn) {
// die("Connection failed: " . mysqli_connect_error());
//}
//echo "Connected successfully";
}
Комментарии:
1. почему здесь есть mysqli_ и PDO? Если вы их смешиваете, вы не сможете.
2. Я надеюсь, что вы используете здесь точку с запятой
protected $conn
3.В вашем заголовке сказано, что создание экземпляра PDO вызывает ошибку , сообщите нам, какие ошибки
4. После a
protected $conn;
я бы ожидал метод, если вы хотите использовать$this->conn
. Это неверно или отсутствует много строк…5. Посмотрите, показанный вами код не имеет смысла, вы слишком много упустили. И вы не ответите на очевидный вопрос о том, какая ошибка возникает. Итак, я ухожу, чтобы сделать что-то более продуктивное
Ответ №1:
Основываясь на вашем редактировании, вы пытаетесь вызвать метод для неопределенной переменной:
function init(){
try{
$this->conn= $this->connectDB("localhost","Mydatabase","admin","test2016"); // the here
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
Должно быть:
function init(){
try{
$this->conn= $this->connectDB("localhost","Mydatabase","admin","test2016"); // the here
$this->conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
^^^^^ here
Комментарии:
1. так ли это? Но я уверен, что создаю PDO в методе connectDB. Я пытаюсь понять, почему это сейчас не определено.
2. Я понимаю, что вы имеете в виду, и я изменил его
$this->conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
, и я все еще показываю мне «Страница локального хоста не работает»
Ответ №2:
Это очень простой пример, который работает для того, что вы пытаетесь сделать, в think .
class Database {
protected $conn;
public function __construct() {
$this->init();
}
public function init() {
try{
$this->conn = $this->connectDB("localhost","Mydatabase","admin","test2016");
$this->conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
if (!$this->conn) {
throw new Exception("Connection failed: ");
}
echo 'Connected';
} catch (PDOException $e) {
die($e->getMessage());
}
}
public function connectDB($servername, $database, $username, $password) {
$dsn = "mysql:host=".$servername.";dbname=".$database;
return new PDO($dsn, $username, $password);
}
}
Если этот класс не работает для вас, пожалуйста, проверьте информацию о вашем сервере или даже состояние сервера.
Я надеюсь, что это вам немного поможет.
Комментарии:
1. Я пробовал это таким образом, но это все равно как-то связано с созданием экземпляра pdo. Я предполагаю, что у меня нет диска pdo или мне не хватает настройки. (Я нахожусь на Mac, используя mamp) это кошмар, выполняющий настройки на Mac> [