mysqli_connect()期望参数1为字符串,给定数组

时间:2014-10-14 10:11:47

标签: php arrays string mysqli

我遇到问题mysqli_connect期望参数是一个字符串,显然是给出了一个数组

我有一个php文件,它将mysqli_connect信息写入变量" userconnection.txt"

的文件中
'localhost','root','','forum'

然后我有一个标准的php connection.php文件,其中添加了用于主机用户和密码的userconnection.txt文件。

<?php

$connectionlink = file('userconnection.txt');
$connection = mysqli_connect($connectionlink);

if (!$connection) {
    die('Connect Error: ' . mysqli_connect_error());
}

?>

它吐出错误:

  

Warning: mysqli_connect() expects parameter 1 to be string, array given in /Applications/XAMPP/xamppfiles/htdocs/forum/install files/connection.php on line 4 Connect Error:

3 个答案:

答案 0 :(得分:1)

这不起作用,实际上是一种安全风险。

安全

txt文件可能是通过某个URL从您的网站访问的。知道该URL(一点都不困难)的攻击者可以获取该文件,现在拥有您的登录凭据。 将文件保存在您的webroot之外或更改它的扩展名和内容,以便它们不是公共可用的。也许是一个PHP文件?

错误

你有两个问题。第一个是file将文件的所有行作为单独的行而不是一个字符串返回。请改用file_get_contents

无论如何,如果你这样做,你仍然会在一个字符串类型的变量中包含所有三个参数。但是mysqli_connect函数需要三个单独的变量,而不是一个。您可以使用explode修复此问题。

快速而肮脏的解决方案

$filecontents = file_get_contents('userconnection.txt');
$connectionvars = explode("," $filecontents);
$connection = mysqli_connect($connectionvars[0], $connectionvars[1], $connectionvars[2]);

if (!$connection) {
    die('Connect Error: ' . mysqli_connect_error());
}

更好但更复杂的解决方案

使用您的连接变量创建一个PHP文件:

<?php
$DBHost = "host";
$DBUser = "user";
$DBPass = "pass";

将您的连接文件更改为:

<?php
require("connectionsettings.php");
$connection = mysqli_connect($DBHost, $DBUser, $DBPass);
if (!$connection) {
    die('Connect Error: ' . mysqli_connect_error());
}

答案 1 :(得分:0)

因为file函数返回值是一个数组。说var_dump($connectionlink);

如果将参数存储在变量或常量中,那就更好了。使用.php代替.txt,并包含该文件。

例如:

include('connection.php');

$link = mysqli_connect(DB_HOST,DB_USER,DB_PASS,DB_NAME) or die("Error " . mysqli_error($link));

和你的connection.php

<?php
define('DB_HOST', 'localhost');
define('DB_USER', 'username');
define('DB_PASS', 'password of the user');
define('DB_NAME', 'name of your database');

答案 2 :(得分:-3)

问题符合$connection = mysqli_connect($connectionlink)。因为变量不是字符串(在这种情况下它是 '$connectionlink'),所以它显示了错误。 在我的情况下,我将其更改为 $connection = mysqli_query($connectionlink) 并解决了所有问题。