我已经找到了这个问题的答案,但我发现的所有内容对我都没有用。我在php中的pdo连接有问题。
当我将mysql数据直接输入pdo语句时,它可以正常工作。但是当我使用变量时,它并没有。我已经查明了如何将变量包含到pdo语句中,但它没有用。
这是代码,当它工作时:
$host = 'localhost';
$username = 'root';
$password = 'password';
$dbname = 'Database';
$con = new PDO("mysql:host=$host;dbname=$dbname", $username, $password);
以下是代码,当它不起作用时:
$file = "mysqldatas.txt";
$lines = file($file);
$host = $lines[1];
$username = $lines[2];
$password = $lines[3];
$dbname = $lines[4];
$con = new PDO("mysql:host=$host;dbname=$dbname", $username, $password);
如您所见,我尝试第二次从文本文件中读取数据。但我不知道' localhost'和$ lines [1]之间的区别在哪里,因为当我回显$ lines [1]时,输出是localhost,应该是。
请帮帮我们,这真烦人。如果您还可以解释为什么它直接输入主机名或使用保存主机名的变量(正如我所说,我使用echo,并且它表示localhost),这将是很好的。
感谢您的帮助! 再见。
答案 0 :(得分:3)
实际问题是file()
也会获得每行的换行符,除非使用FILE_IGNORE_NEW_LINES
(或某种trim()
函数)。所以你需要使用
$lines = file($file, FILE_IGNORE_NEW_LINES);
代替。从file()
的手册中,它告诉我们
注意: 除非使用FILE_IGNORE_NEW_LINES,否则结果数组中的每一行都将包含行结尾,因此如果您不希望行结束,则仍需要使用rtrim()。
trim()
也可能代替此标志。
还有一些其他的,不同的可能性来分隔凭证和连接,最常见的是要么使用创建对象的文件connection.php
,只需要包含它,并在任何地方使用它需要连接,或使用凭据创建自己的.ini
文件,并通过parse_ini_file()
获取。
connection.php
$host = 'localhost';
$username = 'root';
$password = 'password';
$dbname = 'Database';
$con = new PDO("mysql:host=$host;dbname=$dbname", $username, $password);
其他档案
require "path/to/connection.php";
$con->prepare(...);
然后使用.ini
个文件。您可以创建config.ini
文件,并从parse_ini_file()
的config.ini
host = localhost
dbname = Database
user = root
password = password
type = mysql
连接
$config = parse_ini_file("config.ini");
$con = new PDO($config['type'].":host=".$config['host'].";dbname=".$config['dbname'], $config['username'], $config['password']);
答案 1 :(得分:1)
使用文件函数时,请确保获取换行符。试试这个:
$file = "mysqldatas.txt";
$lines = file($file, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
$host = $lines[1];
$username = $lines[2];
$password = $lines[3];
$dbname = $lines[4];
$con = new PDO("mysql:host=$host;dbname=$dbname", $username, $password);
答案 2 :(得分:1)
来自http://php.net/manual/en/function.file.php:
返回值¶
返回数组中的文件。数组的每个元素对应于文件中的一行,仍然附加换行符。失败时,file()返回FALSE。