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

时间:2017-11-14 01:59:05

标签: php mysql sql gd gdlib

长话短说,我有一个项目需要根据数据库中的数据创建用户的头像。使用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

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

谢谢!

1 个答案:

答案 0 :(得分:0)

我尝试了你的代码并遇到了同样的问题,所以我做了一些挖掘,发现没有从数据库返回任何内容,所以我所做的是在数据库名称前加上tablename并且它有效。见下面的代码

$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);

尝试一下,让我知道它是怎么回事。