我遇到问题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:
答案 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) 并解决了所有问题。