我有一个 .php
调用的文件 db_conn.php
建立与数据库的连接。这是文件的代码。
<?php
$servername = "localhost";
$username = "root";
$password = "password";
$dbname = "db_name";
$conn = new mysqli($servername, $username, $password, $dbname);
if ($conn->connect_error) {
die("Connection failed: ");
}
else{
}
?>
当我需要从其他文件执行一些数据库操作时,例如从 login.php
文件,我要做的是使用 include_once()
函数向 db_conn.php
作为参数。我对另一个需要db访问的php文件也这样做。我对这种做法/方法有些怀疑。
1既然我用的是 include_once()
函数并多次调用db连接脚本?它每次都会打开新的连接吗?如果是,应如何实施?
2如果有人试图使用 include_once("www.mywebsite.com/php/db_conn.php")
他们能在我的数据库上执行数据库查询吗?
2条答案
按热度按时间iih3973s1#
1.既然我使用include\u once()函数并多次调用db connection脚本,那么这样做可以吗?它每次都会打开新的连接吗?如果是,应如何实施?
你应该使用
require_once("db_conn.php");
http://php.net/manual/en/function.require-once.php以下是它们之间的区别
include(), include_once(), require()
以及require_once()
require、include、require\u once和include\u once之间的区别?2.如果有人试图使用include\u一次(“www.mywebsite.com/php/db_conn.php)他们能在我的数据库上执行数据库查询吗?
如果在大多数web服务器(php.ini)中默认禁用/不允许此设置,则不能使用
include
为了安全起见,包含来自远程地址的文件。如果仍要允许包含远程文件,则指令
allow_url_include
必须设置为On
在php.ini中但从安全的Angular 来看,这又是一种不好的做法;因此,它通常被禁用(实际上,我从未见过它被启用)
但是,如果要读取远程文件的内容,可以使用
file_get_contents
函数,但这将作为纯html标记代码返回,不会有任何服务器端代码。参考:包括来自另一个带有php的服务器的php文件
e1xvtsh32#
既然我使用include\u once()函数并多次调用db connection脚本,那么这样做可以吗?它每次都会打开新的连接吗?如果是,应如何实施?
是的,这很好。既然你用的是
include_once
,php将自动识别它已经包含在文件中,跳过第二个调用,您将只获得一个连接。我建议把这个改成require_once
但是,由于您希望在找不到包含的文件时脚本立即失败。如果有人试图使用include\u一次(“www.mywebsite.com/php/db_conn.php)他们能在我的数据库上执行数据库查询吗?
一般来说,没有。任何人要求该网址只会得到一个空白页。但是,最佳实践是将这样的库文件放在web服务器的文档根目录之外。例如:
在这里,您可以将web服务器指向
/path/to/project/public
然后在你的index.php
,你可以这样做:或者:
这样,您自己的代码就可以引用
/lib
但不能通过web服务器直接请求它们。