GD 库图像生成不适用于 mySQL 查询

GD Library image generation does not work with mySQL query

长话短说,我有一个项目需要根据数据库中的数据创建用户头像。头像是使用 imagepng() 和 imagecopy() 函数生成的。

用户的头像可以是男性或女性,并且该偏好保存在 SQL 数据库中作为列 "user_gender",其中“0”= 女性,“1”= 男性:

Screenshot of table in phpmyadmin

所以我们的想法是,我们从数据库中获取数据,将值(0 或 1)分配给变量,然后使用该变量生成图像。请参阅下面的代码:

<?php

    //Database connection script not included, but works fine

    $id = 1;

        $sqlQuery = "SELECT * FROM table WHERE id = :id";
        $statement = $db->prepare($sqlQuery);
        $statement->execute(array(':id' => $id));

        while($rs = $statement->fetch())
        {
            $gender = $rs['user_gender'];

        }

    if($gender == "0")
    {
        //Allocation of images, file paths
        $bodytype ="images/female/f_body.png";
    }   
    else
    {
        $bodytype ="images/male/f_body.png";
    }

    header('Content-Type: image/png');

    $destination = imagecreatefrompng($bodytype);

    imagealphablending($destination, true);
    imagesavealpha($destination, true);

    imagepng($destination); 
?>

然而,此代码不起作用,因为它会在浏览器上生成一个空白的黑页。

然而,这段代码,没有从数据库中提取任何内容,工作得很好:

<?php

//taking out the sql query and just creating a $gender variable for testing

$gender = "0";

if($gender === 0)
{
    $bodytype ="images/female/f_body.png";
}   
else
{
    $bodytype ="images/female/f_body.png";
}

header('Content-Type: image/png');

$destination = imagecreatefrompng($bodytype);

imagealphablending($destination, true);
imagesavealpha($destination, true);

imagepng($destination);
?>

这是第二个代码的输出,表明图像生成确实有效,问题很可能是从 sql 到 php 的传递:

Working image generation in browser

如果知道我做错了什么,或者被提示为什么从数据库中提取变量时代码停止工作,我将非常感激。

谢谢!

我尝试了您的代码并遇到了同样的问题,所以我对它进行了一些挖掘,发现没有从数据库返回任何内容,所以我所做的是在数据库名称前加上表名,它起作用了。请参阅下面的代码

$gender = '';

$sqlQuery = "SELECT * FROM register.users WHERE id = :id";
$statement = $db->prepare($sqlQuery);
$statement->execute(array('id' => 1));

while($rs = $statement->fetch())
{
    $gender = $rs['gender'];
}

if($gender == 0)
{
    $bodytype ="images/female/f_body.png";
}
else if($gender == 1)
{
    $bodytype ="images/male/m_body.png";
}

$destination = imagecreatefrompng($bodytype);

imagealphablending($destination, true);
imagesavealpha($destination, true);

header('Content-Type: image/png');
imagepng($destination);

试一试,告诉我进展如何。