【问题标题】:How to connect to database using single variable in php如何在php中使用单个变量连接到数据库
【发布时间】:2016-12-20 03:23:56
【问题描述】:

我有一个键和值的二维数组

   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: Name or service not known in /opt/lampp/htdocs/conductexam/admin/connTo.php13 行

警告:mysqli_select_db() 需要参数 1是 mysqli,布尔值在 /opt/lampp/htdocs/conductexam/admin/connTo.php15

警告:mysqli_error() 期望参数 1 为 mysqli,布尔值在 /opt/lampp/htdocs/conductexam/admin/connTo.php16 行

但是当我改为

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

一切正常。怎么样?

有人可以帮我吗?我非常感谢您的帮助。提前谢谢大家。

【问题讨论】:

  • 以这种方式发送连接是一种可怕的做法。

标签: php mysqli


【解决方案1】:

这与您的问题无关,但是这一行:

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]);

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

【讨论】:

  • 我向你保证,情况并非如此。它至少需要 3 个参数,并且可以选择额外的 3 个参数。它们都可以是 php 字符串变量。请参阅手册页:php.net/manual/en/mysqli.construct.php
猜你喜欢
  • 2022-12-18
  • 1970-01-01
  • 2017-05-16
  • 2011-06-29
  • 2011-02-11
  • 2020-09-20
  • 2014-09-03
  • 2020-12-26
  • 2010-12-05
相关资源
最近更新 更多