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