

**前提**  
失礼いたします。  
PHP初心者です。  
現在ECサイトを作るため、商品一覧ページを作成しています。

**実現したいこと**  
データベースに格納しているデータを配列で取得したい。

**発生している問題・エラーメッセージ**  
配列で取得しようとしたところ、１文字の文字列しか取得できません。

**例**

[code]

    var_dump($pro_name[[0])
    
    //結果
    「item1」という名前の「i」だけ出力される
    
[/code]

**該当のソースコード**

[code]

    <?php
        $dsn='mysql:dbname=shop;host=localhost;charset=utf8';
        $user='root';
        $password='';
        $dbh=new PDO($dsn,$user,$password);
        $dbh->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
    
        $sql='SELECT name,price,image FROM mst_product ';
        $stmt=$dbh->prepare($sql);
        $stmt->execute();
    
        $rec=$stmt->fetch(PDO::FETCH_BOTH);
        $pro_name=$rec['name'];
        $pro_price=$rec['price'];
        $pro_image_name=$rec['image'];
    
      
        
        $dbh=null;
    
    
    ?>
    <!DOCTYPE html>
    <html lang="ja">
    <head>
        <meta charset="UTF-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <link rel="stylesheet" href="/css/style.css">
        <title></title>
    </head>
    <body>
    
    <div class="inner-wrap">
    <h2 class="itemarea-list">商品一覧</h2>
    <div class="item-area">
    
    
    <div class ="item-area-item">
    <?php for($i=0;$i<10;$i++)
        {
    ?>
        <?php echo $pro_image_name[$i].'<br>'; ?>
     <?php echo $pro_name[$i].'<br>';?> 
        <?php echo $pro_price[$i].'<br>'; ?>
    <?php
        }
    ?>
        </div>
    
    </div>
    </div>
    <br>
    <a href="shop_cartlook.php">カートを見る</a>
    </body>
    </html>
    
[/code]

**試したこと**  
$rec=$stmt->fetch(PDO::FETCH_BOTH);を(PDO::FETCH_ASSOC)やfetchallにしてみましたが変わらずでした。  
お手数ですがどなたかご教示のほどよろしくお願いいたします。


CC BY-SA 4.0
2022-10-19T19:13:59.900
91682
2023-05-26T16:25:53.217
2022-10-20T00:14:54.560
19110
40610
question
php
PHPでデータベースから配列で取得したいが、一文字しか取得できない


変数が配列でなければ、オフセットアクセスアクセスせずに  
普通に`var_dump($pro_name)`とすれば文字列が出力されます。

$pro_name[0]のように、文字列の格納された変数を配列の様にオフセットアクセスすると１文字ずつ文字を取り出す事ができます。  
<https://www.php.net/manual/ja/language.types.string.php#language.types.string.substr>


CC BY-SA 4.0
2022-10-20T09:03:22.220
91694
2022-10-20T09:03:22.220
22793
91682
answer

[code]

    $rec=$stmt->fetchAll(PDO::FETCH_BOTH);
    
[/code]

上記、fetchAllで全部取っておいて、下記３つは不要

[code]

    $pro_name=$rec['name'];        // 不要
    $pro_price=$rec['price'];      // 不要
    $pro_image_name=$rec['image']; // 不要
    
[/code]

で出力はこんな感じで回せば良いです。

[code]

    <?php echo $rec[$i]['name'].'<br>'; ?>
    <?php echo $rec[$i]['plice'].'<br>'; ?>
    <?php echo $rec[$i]['image'].'<br>'; ?>
    
[/code]

それかもうこれだけ

[code]

    while ($rec = $stmt->fetchAll(PDO::FETCH_ASSOC)) { 
        <?php echo  $rec['name'].'<br>'; ?>
        <?php echo  $rec['plice'] .'<br>'; ?>
    }
    
[/code]


CC BY-SA 4.0
2023-05-26T13:52:44.793
94986
2023-05-26T16:25:53.217
2023-05-26T16:25:53.217
3060
58462
91682
answer