使用PHP通过UPDATE MySQL更新数据库中的Blob图像

3

我正在尝试更新数据库中的一条记录,该记录是blob类型。使用这种方法插入数据非常容易,但是在使用UPDATE时,它似乎只适用于文本,不起作用。有人能指导我正确的方向吗?

以下是我的代码:

<?php
$conn=mysqli_connect("localhost","root","root","plantidentify");
// Check connection
if (mysqli_connect_errno()) {
  echo "Failed to connect to MySQL: " . mysqli_connect_error();
}

$ufamid = mysqli_real_escape_string($conn, $_POST['ufamilyid']);
$ucommonname = mysqli_real_escape_string($conn, $_POST['ucomname']);
$usynname = mysqli_real_escape_string($conn, $_POST['usynonyms']);
$uspecies = mysqli_real_escape_string($conn, $_POST['uspecies']);
$uprop = mysqli_real_escape_string($conn, $_POST['upropagation']);
$uimageData = mysqli_real_escape_string($conn, (file_get_contents($_FILES['uimage']['tmp_name'])));
$uheight = mysqli_real_escape_string($conn, $_POST['uheight']);
$utreeclass = mysqli_real_escape_string($conn, $_POST['utreeclass']);
$ulifecycle = mysqli_real_escape_string($conn, $_POST['ulifecycle']);

$UpdateQuery = "UPDATE plant 
                SET FamilyID='$ufamid', CommonName='$ucommonname',       
                    SynonymNames='$usynname', Species='$uspecies', 
                    Propagation='$uprop', Image='$uimageData', 
                    Height='$uheight', TreeClass='$utreeclass', 
                    Lifecycle='$ulifecycle' 
                WHERE PlantID='$_POST[uplantid]'";


if (!mysqli_query($conn,$UpdateQuery)) {
  die('Error: ' . mysqli_error($conn));
}

header("Location: plantedit.php");

mysqli_close($conn);
?>

$uimageData是变量,其中包含来自另一个文件中表单上传的文件。我正在尝试更新blob的数据库列名为“Image”。

这可能有所帮助,这是另一个.php文件中的表单代码,从中触发了update plant.php:

    <?php //display databse values
        while($plant=mysql_fetch_array($retval)) {
        echo"<form action=updateplant.php method=post>";

        echo "<tr>";
        echo "<td>" . "<input type=number name=ufamilyid value='" .$plant['FamilyID']."' ></td>";
        echo "<td>" . "<input type=text name=ucomname value='" .$plant['CommonName']."' ></td>";
        echo "<td>" . "<input type=text name=usynname value='" .$plant['SynonymNames']."' ></td>";
        echo "<td>" . "<input type=text name=uspecies value='" .$plant['Species']."' ></td>";
        echo "<td>" . "<input type=text name=uprop value='" .$plant['Propagation']."' ></td>";
        echo "<td>" . "<input type=file name=uimage></td>";
        echo "<td>" . '<img class="crop2" src="data:image/jpeg;base64,'. base64_encode( $plant['Image'] ).'"/>'." </td>";
        echo "<td>" . "<input type=number name=uheight value='" .$plant['Height']."' ></td>";
        echo "<td>" . "<input type=text name=utreeclass value='" .$plant['TreeClass']."' ></td>";
        echo "<td>" . "<input type=text name=ulifecycle value='" .$plant['Lifecycle']."' ></td>";
        echo "<td>" . "<input type=hidden name=uplantid value='" .$plant['PlantID']."' ></td>";
        echo "<td>" . "<input type=submit name=update value=Update" . " ></td>";
        echo "</tr>";




        echo "</form>";
        }//end while
        mysql_close($conn);
        ?>

我已经移除了重定向,但仍然没有错误。我肯定是在进行POST请求。我也按照您所说的更改了我的代码:{$_POST['uplantid']},但仍然没有变化。 - alphadmon
请检查您是否收到了 $uimageData = mysqli_real_escape_string($conn, (file_get_contents($_FILES['uimage']['tmp_name']))); 的任何内容。此外,请在此处发布您的HTML代码。 - Anish
@baldrs,非常感谢你!我简直不敢相信我竟然忽略了那个问题。再次感谢你,非常感激。 - alphadmon
@Anish,感谢您的所有建议。Baldrs已经解决了我的问题。非常感谢你们两个! - alphadmon
@SourceCoder,欢迎您。 - Anish
显示剩余13条评论
2个回答

3
要上传文件,您应该在表单中提及enctype='multipart/form-data'。希望这可以解决您的问题。
<?php 

//display databse values
            while($plant=mysql_fetch_array($retval)) {
            echo"<form action='updateplant.php' method='post'  enctype='multipart/form-data' >";

            echo "<tr>";
            echo "<td>" . "<input type=number name=ufamilyid value='" .$plant['FamilyID']."' ></td>";
            echo "<td>" . "<input type=text name=ucomname value='" .$plant['CommonName']."' ></td>";
            echo "<td>" . "<input type=text name=usynname value='" .$plant['SynonymNames']."' ></td>";
            echo "<td>" . "<input type=text name=uspecies value='" .$plant['Species']."' ></td>";
            echo "<td>" . "<input type=text name=uprop value='" .$plant['Propagation']."' ></td>";
            echo "<td>" . "<input type=file name=uimage></td>";
            echo "<td>" . '<img class="crop2" src="data:image/jpeg;base64,'. base64_encode( $plant['Image'] ).'"/>'." </td>";
            echo "<td>" . "<input type=number name=uheight value='" .$plant['Height']."' ></td>";
            echo "<td>" . "<input type=text name=utreeclass value='" .$plant['TreeClass']."' ></td>";
            echo "<td>" . "<input type=text name=ulifecycle value='" .$plant['Lifecycle']."' ></td>";
            echo "<td>" . "<input type=hidden name=uplantid value='" .$plant['PlantID']."' ></td>";
            echo "<td>" . "<input type=submit name=update value=Update" . " ></td>";
            echo "</tr>";




            echo "</form>";
            }//end while
            mysql_close($conn);
        ?>

0

看起来你在WHERE语句中打错了字,$_POST[uplantid]应该是". $_POST['uplantid'] ."


我按照你指出的错别字进行了更改,但仍然没有任何区别。图像似乎仍未更新到我的数据库表中。不过还是谢谢你的建议。 - alphadmon

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接