如何使用php中的单个变量连接到数据库

时间:2016-08-13 05:00:45

标签: php mysqli

我有二维数组,键和值

   Array ( 
     [conduct] => 
       Array ( [databaseName] => conduct 
               [databaseKey] => 'localhost', 'root', '','conduct' )   
     [conducttest] => 
       Array ( [databaseName] => conducttest 
               [databaseKey] => 'localhost', 'root', '','conducttest' ) 
     [test] => 
       Array ( [databaseName] => test 
               [databaseKey] => 'localhost', 'root', '','test' ) 
)

我的表单中有一个下拉列表,当用户选择我要与该数据库连接的任何数据库名称时,该下拉列表包含数据库名称。所以为此,我创建了二维数组和存储数据库名称及其连接字符串。

当表单提交时,我已将这些名称和连接字符串发送到php。

这是我的PHP代码:

<?php
    if(!isset($_SESSION)){session_start();}
    include "includes/timezone.php";

    $currentURL = (@$_SERVER["HTTPS"] == "on") ? "https://" : "http://";
    $currentURL .= $_SERVER["SERVER_NAME"];
    $url = $_SERVER['PHP_SELF'];
    $url = $currentURL.str_replace("/admin/connTo.php","",$url);

    $key = isset($_REQUEST['key']) ? $_REQUEST['key'] : "";
    $dbname = isset($_REQUEST['name']) ? $_REQUEST['name'] : "";

    $conTo = mysqli_connect($key);

    if (!mysqli_select_db($conTo, $dbname)) {
        die("Error : ".mysqli_error($conTo));
    }

    if (mysqli_connect_errno()){
        echo "Failed to connect to MySQL: " . mysqli_connect_error();
    }

    mysqli_query($conTo,"SET character_set_results='utf8'");
    mysqli_query($conTo,"SET NAMES utf8");
    mysqli_query($conTo,"SET GLOBAL time_zone='+05:30'");   
    mysqli_query($conTo,"SET time_zone='+05:30'");  
    mysqli_query($conTo,"SET system_time_zone='+05:30'");   
    mysqli_query($conTo,"SET GLOBAL max_connect_errors=100000");    
    mysqli_query($conTo,"SET GLOBAL max_connections=100000");   
    mysqli_query($conTo,"SET GLOBAL connect_timeout=100");  
    mysqli_query($conTo,"SET GLOBAL max_user_connections=100000");

    if(isset($conTo) && isset($_REQUEST['key'])){
        echo "1";
    } else if(isset($_REQUEST['key'])){
        echo "0";
    }
?>

我100%确定$ key获取正确的连接字符串但我的代码显示在错误之下:


警告:mysqli_connect():php_network_getaddresses:getaddrinfo失败: /opt/lampp/htdocs/conductexam/admin/connTo.php 行上未知的名称或服务13

警告:mysqli_connect():( HY000 / 2002):php_network_getaddresses:getaddrinfo failed: /opt/lampp/htdocs/conductexam/admin/connTo.php 在线 13

警告:mysqli_select_db()期望参数1为mysqli,在 /opt/lampp/htdocs/conductexam/admin/connTo.php 15 中给出布尔值/ b>

警告:mysqli_error()期望参数1为mysqli,布尔值 /opt/lampp/htdocs/conductexam/admin/connTo.php 16 < / b>

但是当我改为

$conTo = mysqli_connect('localhost', 'root', '','conduct');

它的工作正常。怎么样?

任何人都可以帮助我吗?我真的很感谢你的帮助。提前谢谢大家。

1 个答案:

答案 0 :(得分:0)

这与你的问题无关,不过这一行:

if(!isset($_SESSION)){session_start();}

不应该使用。如果您正在使用会话,那么您需要在脚本顶部使用session_start()。

关于你的问题,你误解了mysqli_connect。它需要参数,而不是单个字符串甚至数组。

我不清楚你是否试图表明你正在使用javascript将这些参数传递给表单变量,但这听起来不错。大多数人都会在附带的脚本中拥有凭据。

但是,我们假设您要继续使用现有方案:

$key = isset($_REQUEST['key']) ? $_REQUEST['key'] : "";
$params = explode(',', $key);
$conTo = mysqli_connect($params[0], $params[1], $params[2], $params[3]);

此代码实际上有机会工作,就像将参数作为字符串常量传递一样。