gpt4 book ai didi

php - 无法在长文本字段中保存序列化数组

转载 作者:行者123 更新时间:2023-11-29 12:12:00 25 4
gpt4 key购买 nike

我正在尝试将序列化数组保存到 LONGTEXT 字段,但由于某种原因,数据未保存,并且我没有收到错误。

    $serializeArray = serialize($result_arr) ; 
echo "Serialized String: " . $serializeArray ."<br><br>";

$test2 = "This is a test" ;

$return = mysqli_query($con,"UPDATE mytable.exp_cartthrob_item_options_options SET data = '" . $serializeArray ."' WHERE id = '1' " );

echo "<br /><br />" ;
echo $return ;

如果我用 $test 替换 $serializeArray ,它就可以正常工作。有什么问题的想法吗?

最佳答案

首先,序列化数据会留下引号和特殊字符,因此您可能会按照您的方式生成无效的查询。您确实需要使用准备好的语句来确保您有有效的查询。更不用说您最终可能会遭受各种令人讨厌的 SQL 注入(inject)攻击 - 只需使用准备好的语句即可。

http://php.net/manual/en/mysqli.quickstart.prepared-statements.php

其次,将序列化数据存储在数据库中通常是一种非常糟糕的做法,因为数据不再可移植。您有一个具有各种数据类型的关系数据库 - 使用它们!

为了强调不使用准备好的语句所带来的风险,请考虑要序列化的数组是否如下所示:

$resultArray = array("';DROP TABLE mytable;##");

猜猜会发生什么......

更新帮助:以下是使用准备好的语句编写查询的方法 - 您需要确保验证每个步骤以捕获和处理错误。

第 1 步:写下您的查询 - “?”是您绑定(bind)参数的地方

$query = "UPDATE mytable.exp_cartthrob_item_options_options SET data = ? WHERE id = '1'";

第 2 步:创建准备好的语句

$stmt = $con->prepare( $query );

第3步:绑定(bind)参数(查询中的“?”)

$stmt->bind_param( "s" , $serializeArray );

第 4 步:执行查询

$stmt->execute();

您最好通读整个 mysqli 文档,以便了解哪些方法可供您使用。

关于php - 无法在长文本字段中保存序列化数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30514811/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com