在函数中包含我的 connection.php 不起作用 php
Posted
技术标签:
【中文标题】在函数中包含我的 connection.php 不起作用 php【英文标题】:Including my connection.php in a function doesn't work php 【发布时间】:2016-06-28 19:29:16 【问题描述】:在我的 php 文件中使用一些简单的 sql 查询注入来处理一个小项目。我创建了一个functions.php 文件,其中包含一个名为function displayimage()
的函数。我将我的函数文件包含在我的索引文件中并像这样使用该函数
index.php
<div class="col-lg-2">
<?php displayimage(); ?>
</div>
函数.php
function displayimage()
$dbCon = mysqli_connect("localhost", "root", "root", "testdb");
if (mysqli_connect_errno())
echo "Failed to connect: " . mysqli_connect_error();
$sql= "SELECT * FROM `images` ORDER BY `images`.`id` DESC ";
$query=mysqli_query($dbCon, $sql);
if ($row = mysqli_fetch_array($query))
echo '<img class="img-responsive" style="margin-top: 10px;" src="data:image;base64,'.$row[2].' "> ';
mysqli_close($dbCon);
?>
所以它工作正常但是.. 我试图通过将数据库连接放在一个单独的文件中来清理我的代码,并像include('connection.php');
一样包含它。不幸的是,我的代码不再起作用,并且内容不会显示在我的索引文件中。我的 PHPStorm 说 $dbCon
现在是一个无法定义的变量。我在这里做错了什么?
新函数.php
function displayimage()
include('connection.php');
$sql= "SELECT * FROM `images` ORDER BY `images`.`id` DESC ";
$query=mysqli_query($dbCon, $sql);
if ($row = mysqli_fetch_array($query))
echo '<img class="img-responsive" style="margin-top: 10px;" src="data:image;base64,'.$row[2].' "> ';
mysqli_close($dbCon);
?>
连接.php
$dbCon = mysqli_connect("localhost", "root", "root", "testdb");
if (mysqli_connect_errno())
echo "Failed to connect: " . mysqli_connect_error();
【问题讨论】:
请添加connection.php的内容 这是一个变量范围问题。$dbCon
在函数内部不存在,函数具有本地范围,而 $dbCon
(可能)在全局范围内创建。您需要将连接传递给函数displayImage($dbCon)
和/或重构您的代码。请不要使用全局变量。
函数不“支持”未包含或限定在其中的变量。您需要将变量设为全局变量,这是一个坏主意,或者召回它
@GlennGijsberts - 是的,您的包含代码将起作用。顺便说一句:如果你不做任何像插件这样的小东西,就不要使用全局变量......
【参考方案1】:
如果您想与数据库建立连接,您应该在页面顶部添加connections.php
。但是,如果您使用的是 mysqli,我建议您在程序上使用面向对象的语法。这样您就不必在每次查询时解析 $connection
变量。
require_once 'connection.php';
function displayimage()
global $dbCon;
$sql= "SELECT * FROM `images` ORDER BY `images`.`id` DESC ";
if($qry= mysqli_query($dbCon, $sql) != false)
// query ran successfully, here you should actually continue the code..
while($row = mysqli_fetch_array($query))
echo '<img class="img-responsive" style="margin-top: 10px;" src="data:image;base64,'.$row[2].' "> ';
else
echo 'failed to retrieve images from the database.';
此外,您不必在每次完成查询时都关闭连接。它在脚本结束时自动完成,没有它可以继续使用已经打开的连接。
但是在函数中使用全局变量是不好的做法,只要确保你永远不会覆盖 $dbCon 变量,当使用其他人的代码时可能会发生这种情况。
【讨论】:
好的。我明白了,它起作用了,也许这种方式比以前更干净了。但是,上面有 2 个人建议不要使用全局变量。我为什么要使用它? 我做了一些编辑,但要回答你的问题,我会说它在那里可以使用,但是在这种特殊情况下,我们谈论的是一个脆弱的变量。如果它被覆盖,您的代码将大量失败,并且在处理您使用的错误(没有)时,您将无法诊断它。但它伴随着经验来寻找保护变量的方法。例如,包装在类中(这就是为什么我建议使用 mysqli OO-Style(或 PDO))以上是关于在函数中包含我的 connection.php 不起作用 php的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Angular js 中包含我的组件的 .css 文件
在 vue cli3 项目中包含我自己的 js 和 css 文件