php:取消序列化数据并将其插入mysql数据库&在php中回显到表中

m3eecexj  于 2021-06-21  发布在  Mysql
关注(0)|答案(1)|浏览(277)

我成功地序列化了数据(数组)并将其插入到数据库的列中。现在我想选择该列并将其转换回and数组,并在单独的行中列出数组中的每个元素。
我正在努力解决的问题:
与我未序列化的数组斗争。我之所以要序列化,首先是因为我使用的是一个多维数组,它可以在一个顺序中包含一个或多个项。
将序列化数据插入mysql数据库后,信息如下所示:
示例1-[订单中数量为1的一个项目]。

a:1:{i:7354028228659;a:1:{s:8:"quantity";i:1;}}

我想取消序列化它并用下面的结构将其填充到一个php表中。

|   Varaint_id  | Quantity | 
|---------------|----------|
| 7354028228659 |    1     |         
|---------------|----------|

如果订单中有多个项目,我希望实现相同的布局。
例2-【订单中的3个项目,每个项目的数量为1】。

a:3:{i:6836781613107;a:1:{s:8:"quantity";i:2;}i:6737290241;a:1:{s:8:"quantity";i:1;}i:49366524679;a:1:{s:8:"quantity";i:1;}}

以下是上述三个项目的说明,每个项目有一个单元。

----------------------------
|   Varaint_id  | Quantity | 
----------------|-----------
| 6836781613107 |    1     |         
|---------------|----------|
| 6737290241    |    1     |         
|---------------|----------|
| 49366524679   |    1     |         
|---------------|----------|

我目前正在努力将字符串转换回数组,然后使用php将其显示在表中。
当前方法:
步骤1-对数据库运行select查询:
步骤2-从数据库获取$stmt&unserialize列“items”。注意:我在这里挣扎!
步骤3-将结果回显到表中。

//1. Running a SELECT query to the Database.
$stmt = $db->query("SELECT items, order_number, cust_fname
                    From orders
                    WHERE '".$order_number."' = order_number");

//2. Fetch $stmt & Unserialize column 'items' from database.
while($row = $stmt->fetch()){

    $results = unserialize($row['items']);

//3. Echo results into a table. 
    echo "<tr>
        <td>" . $results . "</td>
        <td>" . $results . "</td> 
        </tr>";
 };

我不知道如何在数组中循环并取消序列化数据,然后只在一列中回显变量id,在另一列中回显数量。任何帮助都将不胜感激。

e4yzc0pl

e4yzc0pl1#

如@riggsfully所定,你可以像其他阵法一样消耗你的阵法。

//1. Running a SELECT query to the Database.
// This other approch to query is not sensitive to SQL injection.
 $stmt = $db->prepare("SELECT items, order_number, cust_fname
    From orders
    WHERE order_number = :order_number
 ");

 $stmt->execute([
    ':order_number' => $order_number
 ]);

//2. Fetch $stmt & Unserialize column 'items' from database.
 while($row = $stmt->fetch()){
    $results = unserialize($row['items']);
    //3. Echo results into a table. 
    echo '<tr>';
    foreach ($results as $varaint_id => $result) {
        echo '<td>'.$result['quantity'].</td>
    }
    echo '</tr>';
}

我知道这不是真正的主题,但让我指出您的代码中危险的sql注入问题。
您的代码:

$db->query("SELECT items, order_number, cust_fname
    From orders
    WHERE '".$order_number."' = order_number
     ");

对攻击很敏感,看起来像:

$order_number = "1' --";
$myQuery = "SELECT items, order_number, cust_fname
        From orders
        WHERE '".$order_number."' = order_number
         "

// Will result 
SELECT items, order_number, cust_fname
        From orders
        WHERE '1'--' = order_number'

通知 -- 是mysql中注解行的其余部分的一种方法,此查询将输出订单中的所有行。
PDO::prepare 以及 PDO::execute 你要避免这种攻击。
更多信息

相关问题