如果数据库连接失败,则加载默认图像

时间:2015-07-07 01:49:44

标签: php mysql image

我正在尝试构建一个数据库驱动的站点,通过这样的PHP脚本加载图像;

<img src="get_image.php?holderID=2">

当数据库可访问时,我可以从根目录外的文件夹加载图像,但是如果发生数据库连接失败,我还希望能够加载默认图像。数据库连接从单独的php连接文件mysqli_template_connect.php;

启动
DEFINE('DB_USER', 'someusername');
DEFINE('DB_PASSWORD', 'amnesia');
DEFINE('DB_HOST', 'localhost');
DEFINE('DB_NAME', 'template');
$dbc = @mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME);

然后config.inc.php设置一些常量,其中一个用于所有数据库连接;

define('MYSQL', '../../../dbconnect/mysqli_template_connect.php');

然后get_image.php文件具有条件的数据库连接;

    require('includes/config.inc.php');
    REQUIRE(MYSQL);
    $holderID = $_GET['holderID'];

    if(!$dbc){
        $image_name = 'img/unavailable.png';
        $info = getimagesize($image_name);  
        header("Content-Type: {$info['mime']}\n");
        readfile($image_name);
    }
    else {
        $query = "SELECT imageID FROM image_holder WHERE image_holderID = $holderID ";
        $result = @mysqli_query($dbc, $query);
        $number_rows = mysqli_num_rows($result);

        if ($number_rows == 1) {                  
          $row = mysqli_fetch_array($result, MYSQLI_NUM);
          $imageID = $row[0];
        }
        else {
          $imageID = FALSE;
        }

        if ($imageID) {
            $query = "SELECT file_name FROM image WHERE imageID = $imageID";
            $result = mysqli_query($dbc, $query);
            $number_rows = mysqli_num_rows($result);
            if ($number_rows == 1) {
                $row = mysqli_fetch_array($result, MYSQLI_NUM);
                $image_name = '../../../uploads/' . $row[0];
            }
            else {
                $image_name = 'img/unavailable.png';
            }
        }
        else {
            $image_name = 'img/unavailable.png';
        }

        $info = getimagesize($image_name);  
        header("Content-Type: {$info['mime']}\n");
        readfile($image_name);
        mysqli_close($dbc);

    }

如果我在XAMP中禁用MYSQL数据库,即使代码的头部和readfile部分在有效的代码部分中几乎相同,也不会加载默认的映像unavailable.png。我对这一切都是一个新手,所以任何关于加载默认图像的想法都会受到赞赏。

3 个答案:

答案 0 :(得分:1)

根据您使用的数据库对象(MySQLi / PDO / etc),您可以检查它们是否已连接。 PDO返回一个可以运行的布尔值。

由于PDO是最受欢迎的,我将提供一个例子。如果您使用其他内容,请随时发表评论,我可以澄清。

$connected = true;
if (!extension_loaded('PDO'))
{
    $connected = false;
}

if (!extension_loaded('pdo_mysql'))
{
    $connected = false;
}

try
{
    $pdo = new PDO("mysql:host={$host};dbname={$db}", $user, $pass);
}
catch(PDOException $e)
{
    $connected = false;
}

if(!$connected){ /* Load default image */ }

注意:只需确保使用正确的图片标题。

答案 1 :(得分:0)

而不是

$dbc = @mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME);

使用

$dbc = mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME);

希望它应该有用..

答案 2 :(得分:0)

我有类似的代码,几乎完全相同。

我怀疑它是标题,因为我在标题中添加了更多信息。尝试不会对你造成伤害。

header('Content-Description: File Transfer');
header('Content-Type: '. $file_content_type);
header('Content-Length: ' . filesize($file_full_path));
header('Content-Disposition: inline; filename=' . $file_name);
readfile($file_full_path);