Avatar billede gtu Nybegynder
13. september 2014 - 12:13 Der er 7 kommentarer og
1 løsning

Mysql SSL

Jeg bruger denne class til at connect til mysql. og det virker fint.

Men nu vil jeg gerne connect med SSL. har SSL sat op må min mysql server og det virker, kan connect med SSL via HeidiSQL


php.net siger jeg skal bruge

mysqli_ssl_set( $obj,
                '/mysql-ssl-certs/server-key.pem',
                '/mysql-ssl-certs/server-cert.pem',
                '/mysql-ssl-certs/ca-cert.pem',
                NULL,
                NULL);

og den skal kaldes før mysqli_real_connect. Men jeg bruger ikke mysqli_real_connect. Kan man ikke gøre det på andre måder


Class dbWrapper {
    protected $_mysqli;
    protected $_debug;
   
   
    public function __construct() {
       
        Global    $conf;
   
        $host      = '';
        $port      = '';
        $username  = '';
        $password  = '';
        $database  = '';
        $debug      = false;
   
        $this->_mysqli = new mysqli($host, $username, $password, $database, $port);
        $this->_mysqli->set_charset("utf8");
        $this->_debug = (bool) $debug;
        if (mysqli_connect_errno()) {
            if ($this->_debug) {
                echo mysqli_connect_error();
                debug_print_backtrace();
            }
            return false;
        }
       
        return true;
    }

    public function q($query) {
        if ($query = $this->_mysqli->prepare($query)) {
            if (func_num_args() > 1) {
                $x = func_get_args();
                $args = array_merge(array(func_get_arg(1)),
                    array_slice($x, 2));
                $args_ref = array();
                foreach($args as $k => &$arg) {
                    $args_ref[$k] = &$arg;
                }
                call_user_func_array(array($query, 'bind_param'), $args_ref);
            }
            $query->execute();

            if ($query->errno) {
              if ($this->_debug) {
                echo mysqli_error($this->_mysqli);
                debug_print_backtrace();
              }
              return false;
            }

            if ($query->affected_rows > -1) {
                return $query->affected_rows;
            }
            $params = array();
            $meta = $query->result_metadata();
            while ($field = $meta->fetch_field()) {
                $params[] = &$row[$field->name];
            }
            call_user_func_array(array($query, 'bind_result'), $params);

            $result = array();
            while ($query->fetch()) {
                $r = array();
                foreach ($row as $key => $val) {
                    $r[$key] = $val;
                }
                $result[] = $r;
            }
            $query->close();
            return $result;
        } else {
            if ($this->_debug) {
                echo $this->_mysqli->error;
                debug_print_backtrace();
            }
            return false;
        }
    }

    public function handle() {
        return $this->_mysqli;
    }
}
Avatar billede gtu Nybegynder
13. september 2014 - 12:58 #1
Okay har fået det til at virke ved at ændre connect delen til..

Men $this->_mysqli->set_charset("utf8"); giver nu en warning: Warning: mysqli::set_charset(): invalid object or resource mysqli in


        $this->_mysqli = new mysqli();
        $this->_mysqli->init( );
        #$this->_mysqli->set_charset("utf8");
       
        $this->_mysqli->ssl_set(
                'client-key.pem',
                'client-cert.pem',
                'ca-cert.pem',
                NULL,
                NULL);
       
        $this->_mysqli->real_connect($host, $username, $password, $database, $port, null, MYSQLI_CLIENT_SSL);
Avatar billede gtu Nybegynder
13. september 2014 - 13:01 #2
Lukker.. skulle bare kalde $this->_mysqli->set_charset("utf8"); efter connect
Avatar billede repox Seniormester
13. september 2014 - 13:18 #3
Nej. mysql_real_connect er den eneste måde du kan anvende ssl på.
Avatar billede repox Seniormester
13. september 2014 - 13:21 #4
Er du sikker på du anvender ssl, så?
Avatar billede erikjacobsen Ekspert
13. september 2014 - 19:07 #5
Nu vil han jo gerne anvende mysqli-funktionerne, og mysqli::real_connect er såmænd den rigtige i det tilfælde: http://php.net/manual/en/mysqli.real-connect.php
Avatar billede repox Seniormester
13. september 2014 - 22:03 #6
Men det er jo også det jeg skriver?
Avatar billede erikjacobsen Ekspert
13. september 2014 - 22:54 #7
mysql!=mysqli
Avatar billede repox Seniormester
13. september 2014 - 23:28 #8
Ahh, ja - nu kan jeg se det :-) Det var en tastefejl fra min side :-)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester