在函数中包含我的connection.php并不能运行php

时间:2016-03-13 21:22:44

标签: php mysql mysqli database-connection

在我的php文件中使用一些简单的sql查询注入一个小项目。我用一个名为function displayimage()的函数创建了一个functions.php文件。我在我的索引文件中包含我的函数文件,并使用像这样的函数

的index.php

            <div class="col-lg-2">
              <?php displayimage(); ?>
            </div>

的functions.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是一个不可确定的变量。我在这里做错了什么?

new functions.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);

 }
 ?>

connection.php

$dbCon = mysqli_connect("localhost", "root", "root", "testdb");

if (mysqli_connect_errno()) {
echo "Failed to connect: " . mysqli_connect_error();
}

1 个答案:

答案 0 :(得分: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变量,在使用其他人的代码时可能会发生这种情况。