У меня есть класс подключения, и он успешно подключается к нужной таблице db. Я выполнил запрос на вставку и хочу получить последний вставленный идентификатор соединения. Но получаю ошибку Notice: Undefined property: connection::$insert_id. Я var_dump($con) на объекте подключения, и вот что я получаю. Надеюсь, кто-нибудь поможет мне решить эту проблему. Ваша помощь очень ценится.
object(connection)#2 (5) { ["db_name"]=> string(5) "dbproject" ["db_user"]=> string(4) "root" ["db_pass"]=> string(0) "" ["db_host"]=> string(9) "localhost" ["connection"]=> object(mysqli)#3 (19) { ["affected_rows"]=> int(1) ["client_info"]=> string(79) "mysqlnd 5.0.12-dev - 20150407 - $Id: 241ae00989d1995ffcbbf63d579943635faf9972 $" ["client_version"]=> int(50012) ["connect_errno"]=> int(0) ["connect_error"]=> NULL ["errno"]=> int(0) ["error"]=> string(0) "" ["error_list"]=> array(0) { } ["field_count"]=> int(0) ["host_info"]=> string(20) "localhost via TCP/IP" ["info"]=> NULL ["insert_id"]=> int(26) ["server_info"]=> string(21) "5.5.5-10.1.19-MariaDB" ["server_version"]=> int(50505) ["stat"]=> string(136) "Uptime: 302248 Threads: 1 Questions: 9631 Slow queries: 0 Opens: 65 Flush tables: 1 Open tables: 40 Queries per second avg: 0.031" ["sqlstate"]=> string(5) "00000" ["protocol_version"]=> int(10) ["thread_id"]=> int(522) ["warning_count"]=> int(0) } }
class connection {
public $db_name;
public $db_user;
public $db_pass;
public $db_host;
public $connection;
public function connection(){
$this->db_host = HOST;
$this->db_user = DB_USERNAME;
$this->db_pass = DB_PASSWORD;
$this->db_name = DB_NAME;
$this->connection = new mysqli($this->db_host, $this->db_user, $this->db_pass, $this->db_name);
}
function connect($host, $user, $pass, $db_name) {
$this->connection = new mysqli($host, $user, $pass, $db_name);
if ( mysqli_connect_errno() ) {
printf("Connection failed: %s", mysqli_connect_error());
exit();
}
return $this->connection;
}
public function query($sql)
{
return $this->connection->query($sql);
}
}
//--------
require_once("connection.php");
class DB {
public $con;
function __construct()
{
$this->con = new connection();
}
function insertQuery($table, $data_array){
$fields = " (";
$values = " VALUES (";
$x = 0;
$y = 0;
foreach ($data_array as $key => $value) {
$fields.= $key;
$values.= "'".addslashes($value)."'";
if (sizeof($data_array)-1 != $x){
$fields.= ",";
$values. = ",";
}
else{
$fields.= ")";
$values. = ")";
}
$x++;
}
$sql = "insert into ".$table.$fields.$values;
if (!$this->con->query($sql) === TRUE) {
return "Error: " . $sql . "<br>" . $this->con->error;
}
else {
$last_id = $this->con->insert_id;
return $last_id;
}
}
}
Да, знаю. Я также добавил свой класс БД.
Ваша функция connection () в классе подключения не вызывается. «public function connection ()» также должна быть «public function __construct ()».
Привет, я удалил оператор подключения mysqli из конструктора. включил его в метод connect (), используя определенные переменные класса и вызвав его как; $dbConnection = new connection(); $this->con = $dbConnection->connect(); работал. Понятия не имею, почему то же самое в конструкторе вело себя странно. Есть объяснения?






В конструкторе класса DB сначала вы должны установить свойства учетных данных (db_host, db_user, db_pass, db_name) и вызвать метод connection класса connection.
class DB {
public $con;
function __construct()
{
$this->con = new connection();
$this->con->db_host = HOST; // replace HOST
$this->con->db_user = DB_USERNAME; // replace DB_USERNAME
$this->con->db_pass = DB_PASSWORD; // replace DB_PASSWORD
$this->con->db_name = DB_NAME; // replace DB_NAME
$this->con->connection();
}
function insertQuery($table, $data_array){
$fields = " (";
$values = " VALUES (";
$x = 0;
$y = 0;
foreach ($data_array as $key => $value) {
$fields.= $key;
$values.= "'".addslashes($value)."'";
if (sizeof($data_array)-1 != $x){
$fields.= ",";
$values. = ",";
}
else{
$fields.= ")";
$values. = ")";
}
$x++;
}
$sql = "insert into ".$table.$fields.$values;
if (!$this->con->query($sql) === TRUE) {
return "Error: " . $sql . "<br>" . $this->con->error;
}
else {
$last_id = $this->con->insert_id;
return $last_id;
}
}
}
«connection :: $ insert_id» звучит неправильно (объявлено как «статическое»?). Я думаю, вам лучше показать, как вы вызываете свой класс и вставляете данные. ($ conection-> insert_id; звучит лучше.)