【问题标题】:PHP class insert data into table not workingPHP类将数据插入表中不起作用
【发布时间】:2016-08-06 13:27:15
【问题描述】:

通过下面的脚本,我正在尝试将新用户添加到用户表中。 我是新来的课程,到目前为止我无法让它工作。我的服务器正在运行 PHP7。

config.php

<?php
/**
 * Database config variables
 */
define("DB_HOST", "localhost");
define("DB_USER", "username");
define("DB_PASSWORD", "12345");
define("DB_DATABASE", "databasename");
?>

connect.php

<?php

class DB_Connect {

    // constructor
    function __construct() {

    }

    // destructor
    function __destruct() {
        // $this->close();
    }

    // Connecting to database
    public function connect() {
        require_once '/folder/folder/folder/config.php';
        // connecting to mysql
        $conn = new mysqli(DB_HOST, DB_USER, DB_PASSWORD, DB_DATABASE);

        // return database handler
        return $conn;
    }

    // Closing database connection
    public function close() {
        $conn->close();
    }

} 
?>

如果我将connect.php中的连接函数更改为下面的函数,我会收到成功消息(连接成功),所以我认为没有数据库连接问题:

public function connect() {
    require_once '/folder/folder/folder/config.php';
    // connecting to mysql
    $conn = new mysqli(DB_HOST, DB_USER, DB_PASSWORD, DB_DATABASE);

    // Check connection
    if ($conn->connect_error) {
       die("Connection failed: " . $conn->connect_error);
    } 
    echo "Connected successfully";
}

functions.php

<?php

class DB_Functions {

    private $db;

    //put your code here
    // constructor
    function __construct() {
        include_once './connect.php';
        // connecting to database
        $this->db = new DB_Connect();
        $this->db->connect();
    }

    // destructor
    function __destruct() {

    }

    /**
     * Storing new device
     */
    public function storeUser($name, $userid, $club) {
        echo;
        // insert user into database
        $result = "INSERT INTO users(name, user_id, club_id, created_at) VALUES('$name', $userid, $club, NOW())";
        // check for successful store
        if ($result) {
            // succes
            return "Device is added";
        } else {
            return "Error: Device is not added!" ;
        }
    }

    /**
     * Getting all users
     */
    public function getAllUsers() {
        $result = "select * FROM users";
        return $result;
    }

}

?>


下面我制作的脚本作为测试脚本在浏览器中运行以添加测试用户:

<?php

$name = "1234567890";
$userid = "1234";
$club = "09876";

include_once './functions.php';

$db = new DB_Functions();

$res = $db->storeUser($name, $userid, $club);

echo $res;

?>

【问题讨论】:

  • MySQL用户是否有权限插入users表?
  • 你永远不会向 mysql 发送任何东西,你只是将一个字符串存储在一个变量中。
  • 您实际在哪里执行查询?
  • 作为旁注,您的 close() 方法也很糟糕。 $connconnect() 方法的局部变量,因此您无法从 close() 方法访问它。
  • $club 是一个字符串,需要在查询中用单引号括起来。

标签: php class mysqli


【解决方案1】:

您没有从您的数据库实例发送任何查询。

connect.php

class DB_Connect {
    private static $_instance;

    // destructor
    function __destruct() {
        $this->close();
    }

    // Connecting to database
    public function connect() {
        require_once '/folder/folder/folder/config.php';

        if (self::$_instance === null) {
            // connecting to mysql
            self::$_instance = new mysqli(DB_HOST, DB_USER, DB_PASSWORD, DB_DATABASE);
        }
        // return database handler
        return self::$_instance;
    }

    // Closing database connection
    public function close() {
        if (self::$_instance !== null) {
            self::$_instance->close();
        }
    }

}

functions.php.php

public function storeUser($name, $userid, $club) {
    // insert user into database
    $query = "INSERT INTO users(name, user_id, club_id, created_at) VALUES({$name}, {$userid}, {$club}, NOW())";
    $result = this->db->query($query); // <--- you missed out this syntax...
    // check for successful store
    if ($result) {
        // succes
        return "Device is added";
    } else {
        return "Error: Device is not added!" ;
    }
}

【讨论】:

【解决方案2】:

不执行insert语句和连接源就不行。试试这个:

$result = $this->db->connect()->query("INSERT INTO `users`(`name`, `user_id`, `club_id`, `created_at`) 
                 VALUES('$name', '$userid', '$club', NOW())");

并检查是否插入了数据:

if($this->db->connect()->affected_rows){
   return 'Device is added';
}

函数connect()不返回任何连接:

你必须输入return $conn;而不是回显连接成功。

【讨论】:

  • 它现在可以工作了,你的代码将它插入到数据库中。插入的支票不起作用。当我运行脚本时,我得到一个空页面,没有反馈(添加了设备)。
  • 请看这个link。如果我的回答有帮助,您可以点击上面的勾号图标。
猜你喜欢
  • 2016-05-23
  • 2016-07-02
  • 1970-01-01
  • 2020-04-27
  • 1970-01-01
  • 1970-01-01
  • 2018-03-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多