Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/189.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php PDO连接MySQL函数_Php_Android_Web Services_Pdo - Fatal编程技术网

Php PDO连接MySQL函数

Php PDO连接MySQL函数,php,android,web-services,pdo,Php,Android,Web Services,Pdo,我将发布的代码有效,但我想知道它是否安全。我将使用它连接我的Android应用程序和我的MySQL数据库 这里我创建了PDO连接我不知道是应该在构造中还是使用方法创建它。现在我使用connect()方法和get()返回相同的对象我应该关闭连接吗?为什么? db_config.php private $db; function __construct(){ } function __destruct(){ } public function

我将发布的代码有效,但我想知道它是否安全。我将使用它连接我的Android应用程序和我的MySQL数据库

这里我创建了PDO连接我不知道是应该在构造中还是使用方法创建它。现在我使用connect()方法和get()返回相同的对象我应该关闭连接吗?为什么?

db_config.php

    private $db;

    function __construct(){

    }

    function __destruct(){

    }

    public function connect(){

        $host = "XXXXXXXX";
        $dbname = "XXXXXXXX";
        $username = "XXXXXXX";
        $password = "XXXXXXXX";

        $options = array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8');

        try{

           $this -> db = new PDO("mysql:host={$host};dbname={$dbname};charset=utf8", $username, $password, $options);

        } catch (PDOException $ex) {
            die("Failed to connect to the database: " . $ex->getMessage());
        }

        $this-> db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        $this -> db->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);

        return $this->db;
    }

    public function get(){
        return $this -> db;
    }
trainer\u functions.php

    private $db;

    function __construct(){

    }

    function __destruct(){

    }

    public function connect(){

        $host = "XXXXXXXX";
        $dbname = "XXXXXXXX";
        $username = "XXXXXXX";
        $password = "XXXXXXXX";

        $options = array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8');

        try{

           $this -> db = new PDO("mysql:host={$host};dbname={$dbname};charset=utf8", $username, $password, $options);

        } catch (PDOException $ex) {
            die("Failed to connect to the database: " . $ex->getMessage());
        }

        $this-> db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        $this -> db->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);

        return $this->db;
    }

    public function get(){
        return $this -> db;
    }
在这段代码中,我将使用这些函数与数据库交互。我在构造中初始化连接,然后每次需要时使用get()方法返回相同的连接。这样行吗

    private $db;

        function __construct(){

        require_once 'db_config.php';
        $this->db = new DB_Connect();
        $this->db->connect();

    }   

    public function storeUser($json){

        $obj = json_decode($json);
        $email = $obj -> {"email"};
        $pass = $obj -> {"password"    

        $query = "INSERT INTO USUARIOS (email, pass) VALUES (:email , :pass)";

        $query_params = array(

            ':email' => $email,
            ':pass' => $pass

        );    
        try {
            $stmt   = $this -> db -> **get()** -> prepare($query);
            $result = $stmt -> execute($query_params);    
           //json response    
        }
        catch (PDOException $ex) {               
          //json response
        }
测试代码的最后一部分是使用标记调用函数。我创建一个trainer_functions对象,然后通过POST收集参数,并使用该对象调用函数。我有两个问题:

-我发送了一个JSON。我应该在JSON内部还是外部发送标记?

-我认为这里应该关闭连接,因为请求已经完成。这是真的吗?

我会做一个很好的web服务,因为这是我课程的最后一个项目,稍后它将是一个带有一些iOS集成的个人项目


非常感谢。

我不知道您包含的其他文件(它们太难阅读),但要回答标题中的问题:PDO已经是一个类了。你不需要更多了

那么,db_config.php

<?php
$host     = "XXXXXXXX";
$dbname   = "XXXXXXXX";
$username = "XXXXXXX";
$password = "XXXXXXXX";
$charset  = 'utf8';

$options = array(
    PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES $charset',
    PDO::ATTR_ERRMODE            => PDO::ERRMODE_EXCEPTION,
    PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
);
$dsn = "mysql:host=$host;dbname=$dbname;charset=$charset"
$db = new PDO($dsn, $username, $password, $options);

将数据库凭据移动到单独的配置文件中。如果您通过http服务器配置而不是使用include语句来包含它,则会得到额外的分数。这样,在http服务器出现配置错误/功能错误的情况下,您就不会泄露凭据。感谢您的评论。请编辑您的问题,使代码稍微精简一点好吗?我只是编辑,并尝试将重点放在最重要的问题上。