#php #mysql
#php #mysql
Вопрос:
У меня есть простая функция для записи в мою базу данных. Это ошибка, которую я получаю.
Это ошибка, которую я получаю
Примечание: попытка получить свойство не-объекта в /var/sites/q/quasisquest.uk/public_html/KeepScore/MySQLDao.php в строке 92 Фатальная ошибка: Неперехваченное исключение ‘Exception’ в /var/sites/q/quasisquest.uk/public_html/KeepScore/MySQLDao.php:92 Трассировка стека: #0 /var/sites/q/quasisquest.uk/public_html/KeepScore/createCommunity.php (26): MySQLDao->Создать сообщество(‘radowns82 @gmail …’, ‘YGHFYG’, ‘Endcliffe’) #1 {main} добавлено /var/sites/q/quasisquest.uk/public_html/KeepScore/MySQLDao.php в строке 92
Это начальный PHP-скрипт, который его вызывает:
<?php
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
require("Conn.php");
require("MySQLDao.php");
$email = htmlentities($_POST["email"]);
$code = htmlentities($_POST["code"]);
$communityname = htmlentities($_POST["communityname"]);
$dao = new MySQLDao();
$dao -> openConnection();
$result = $dao -> createCommunity($email, $code, $communityname);
$dao->closeConnection();
?>
Это MySQLDao.php
<?php
class MySQLDao{
var $dbhost = null;
var $dbuser = null;
var $dbpass = null;
var $conn = null;
var $dbname = null;
var $result = null;
public function __construct(){
$this->dbhost = Conn::$dbhost;
$this->dbuser = Conn::$dbuser;
$this->dbpass = Conn::$dbpass;
$this->dbname = Conn::$dbname;
}
public function openConnection()
{
$this->conn = new mysqli($this->dbhost, $this->dbuser, $this->dbpass, $this->dbname);
if (mysqli_connect_errno())
echo new Exception("Could not establish connection with database");
}
public function getConnection()
{
echo ("2");
return $this->conn;
}
public function closeConnection()
{
if($this->conn!=null)
$this->conn->close();
}
public function getUserDetails($email)
{
$returnValue = array();
$sql = "select * from users where user_email='".$email."'";
$result = $this->conn->query($sql);
if($result != null amp;amp; (mysqli_num_rows($result) >= 1)){
$row = $result -> fetch_array(MYSQLI_ASSOC);
if(!empty($row)){
$returnValue = $row;
}
}
return $returnValue;
}
public function getUserDetailsWithPassword($email, $userPassword)
{
$returnValue = array();
$sql = "select id, user_email, user_name from users where user_email = '".$email."' and user_password = '".$userPassword."'";
$result = $this->conn->query($sql);
if($result != null amp;amp; (mysqli_num_rows($result) >= 1 )){
$row = $result -> fetch_array(MYSQLI_ASSOC);
if(!empty($row)){
$returnValue = $row;
}
}
return $returnValue;
}
public function registerUser($email, $password, $username)
{
$sql = "insert into users set user_email=?,user_password=?,user_name=?";
$statement = $this->conn->prepare($sql);
if(!$statement)
throw new Exception($statement->error);
$statement->bind_param("sss", $email, $password, $username);
$returnValue = $statement->execute();
return $returnValue;
}
public function createCommunity($email, $code, $communityname)
{
$sql = "insert into communities set email=?,code=?,communityname=?";
$statement = $this->conn->prepare($sql);
if(!$statement){
throw new Exception($statement->error);
}
$statement->bind_param("sss", $email, $code, $communityname);
$returnValue = $statement->execute();
return $returnValue;
}
}
?>
В этой таблице «сообщества» также есть столбец «id» (1-й столбец), который я не публикую, поскольку я думал, что он будет автоматически заполняться и увеличиваться… может быть, это то, где я ошибаюсь?
Комментарии:
1. Возможно, ваш ‘$this-> conn равен нулю. Проверьте это или покажите нам больше кода.
2. Вы проверяете, является ли
$statement
значение false , поэтому оно не будет объектом. Вместо этого проверьте наличие mysqli_error в вашем соединении.3. Опубликуйте полный
MySQLDao
класс4. соединение $this-> conn определенно работает нормально, поскольку в нем содержатся другие функции MySQLDao.php досье.
5. Использовать
throw new Exception($this->conn->error);
Ответ №1:
Если соединение не удается, сначала вам нужно знать, почему so показывает фактическую ошибку базы данных. и, во-вторых, очень мало смысла продолжать выполнение скриптов без подключения к базе данных.
Итак, могу ли я предложить это изменение в вашем openConnection()
методе
Кроме того, если вы считаете, что в коде MSYQLI есть вероятность чего-то неправильного, эти 4 строки в основном гарантируют, что вам сообщат о любых ошибках во время разработки, особенно если вы разрабатываете на реальном сервере с отключенными ОТЧЕТАМИ ОБ ОШИБКАХ.
<?php
ini_set('display_errors', 1);
ini_set('log_errors',1);
error_reporting(E_ALL);
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
public function openConnection()
{
$this->conn = new mysqli($this->dbhost, $this->dbuser,
$this->dbpass, $this->dbname
);
if ($mysqli->connect_error) {
echo 'Connect Error: ' . $mysqli->connect_errno . ' - '
. $mysqli->connect_error;
exit;
}
}