php和mysql连接方法

q5iwbnjs  于 2021-06-18  发布在  Mysql
关注(0)|答案(2)|浏览(341)

我有一个 .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") 他们能在我的数据库上执行数据库查询吗?

iih3973s

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文件

e1xvtsh3

e1xvtsh32#

既然我使用include\u once()函数并多次调用db connection脚本,那么这样做可以吗?它每次都会打开新的连接吗?如果是,应如何实施?
是的,这很好。既然你用的是 include_once ,php将自动识别它已经包含在文件中,跳过第二个调用,您将只获得一个连接。我建议把这个改成 require_once 但是,由于您希望在找不到包含的文件时脚本立即失败。
如果有人试图使用include\u一次(“www.mywebsite.com/php/db_conn.php)他们能在我的数据库上执行数据库查询吗?
一般来说,没有。任何人要求该网址只会得到一个空白页。但是,最佳实践是将这样的库文件放在web服务器的文档根目录之外。例如:

/path/to/project
    /public
        index.php
    /lib
        db_conn.php

在这里,您可以将web服务器指向 /path/to/project/public 然后在你的 index.php ,你可以这样做:

require_once '../lib/db_conn.php';

或者:

ini_set('include_path', '/path/to/project/lib');
require_once 'db_conn.php';

这样,您自己的代码就可以引用 /lib 但不能通过web服务器直接请求它们。

相关问题