PDO将数组作为行获取


PDO fetch array as row

你好,我正在尝试将一个代码从旧的MSQL转换为PDO,这样我就可以上传和查看数据库中的图像,我得到了以下错误代码

注意:中的数组到字符串的转换C: 第60行上的''examplep''htdocs''Pentarash''includes''addpost.php

如果我将fetchAll更改为仅fetch,它将不会识别行[2],则数据库具有以下行id(PK)名称(imagename)图像(longblob)

<html>
    <body>
    <form method="post" enctype="multipart/form-data">
        <br/>
        <input type="file" name="image" />
        <br/><br/>
        <input type="submit" name="submit" value="Upload"/>
        </form>
        <?php
            if(isset($_POST['submit'])) 
            {
                if(getimagesize($_FILES['image']['tmp_name']) == FALSE)
                {
                    echo "Please Select an image";
                }
            else
            {
                $image= addslashes($_FILES['image']['tmp_name']);
                $name= addslashes($_FILES['image']['name']);
                $image= file_get_contents($image);
                $image= base64_encode($image);
                saveimage($name,$image);
            }
            }
        displayimage();
        function saveimage($name,$image)
        {
            try {
            define('SITE_ROOT', dirname(__FILE__));
            require SITE_ROOT .  ''dbconnect.php';
            $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); // <== add this line
            $sql="INSERT INTO images (name,image) values ('$name','$image')";
                if ($conn->query($sql)) {
                    echo "uplaoded";
                }
                else{
                    echo "failed";
                }
            $conn = null;
            }
            catch(PDOException $e)
            { 
            echo $e->getMessage();
            } 
        }
        function displayimage()
        {
            try {
            require SITE_ROOT . ''dbconnect.php';
            $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
            $result = $conn->prepare("SELECT * FROM images");
            $result->execute(); 
            while ($row = $result->fetchAll(PDO::FETCH_ASSOC)) {
                echo '<img height="300" width="300" scr="data:image;base64,' .$row[2]. '">';
            }
            $conn = null;
            }
            catch(PDOException $e)
            { 
            echo $e->getMessage();
            } 
        }
        ?>

    </body>
</html>

使用fetchAll()和foreach循环,您可以尝试以下操作:

    $rows = $result->fetchAll();    
    foreach($rows as $row):
     echo '<img height="300" width="300" scr="data:image;base64,' .$row['image']. '">';
    endforeach;

如果你仍然想使用while循环,它应该是:

 while($rows = $result->fetch(PDO::FETCH_ASSOC)){
      echo '<img height="300" width="300" scr="data:image;base64,' .$row['image']. '">';
}

获取时您做得不对。fetchAll返回一个结果行的数组。所以你所要做的就是迭代数组:

$resultRows = $result->fetchAll(PDO::FETCH_ASSOC);
foreach($rows as $row){
  echo '<img height="300" width="300" scr="' .$row['image']. '">'; // you can also use $row[2]
}

另一种可能性是:

if ($result->execute(array())) {
  while ($row = $result->fetch()) {
    echo '<img height="300" width="300" scr="' .$row['image']. '">'; // you can also use $row[2];
  }

好的,我把这个放在这里,供将来有这个问题的用户使用,首先,我的错误是我没有像其他人提到的那样做前臂循环。其次,我的SCR语句是错误的,这里是将显示base64图像的代码的正确部分

    function displayimage()
    {
    try {
      //  define('SITE_ROOT', dirname(__FILE__));
        require SITE_ROOT . ''dbconnect.php';
        $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        $result = $conn->prepare("SELECT * FROM images");
        $result->execute(); 
        $rows = $result->fetchAll();    
        foreach($rows as $row):
        echo '<img height="300" width="300"  src="data:image/png;base64, ' . $row[2] . '">';
        endforeach;
        $conn = null;
        }
        catch(PDOException $e)
        { 
        echo $e->getMessage();
        } 
    }