【问题标题】:PHP Mysql Update Serialize Array in escape apostrophe转义撇号中的PHP Mysql更新序列化数组
【发布时间】:2015-07-12 22:42:49
【问题描述】:

php mysql 更新序列化数据有问题。

我的序列化数据

a:1:{i:0;a:3:{s:5:"image";s:4:"5812";s:5:"title";s:14:"Day 1 : LOREM";s:4:"desc";s:416:"Lorem Ipsum is 'simply dummy' text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500's, when an unknown printer ";}}

问题出在文本中,例如 'simply dummy' 表示撇号。

Mysql 更新声明

$conSave="update serialized_data set value='$str1' where id='{$_POST['key_id']}'";
$conSaveData = mysql_query($conSave);

如何解决序列化数据中的这个问题?

MySQLi 更新声明

$stmt =  $con->stmt_init();
$stmt->prepare("Update serialized_data set value=? WHERE id = ?");
$stmt->bind_param("ss",$a,$b);
$a = $str1;
$b = $_POST['key_id'];

$stmt->execute();

【问题讨论】:

  • 字符串值在插入 SQL 语句之前需要转义,以将引号转换为不会破坏查询的形式
  • 但一般不建议将序列化数据存储在数据库中
  • 你真的应该使用 MySQLi 或 PDO 和准备好的语句/绑定变量......毕竟现在是 2015 年......然后你就不需要转义字符串了
  • @MarkBaker 感谢您的回复。我尝试使用 MySQLi 更新 bind_param 并执行但更新后序列化数据损坏...
  • 也许你应该展示你用于 MySQLi 的代码和绑定参数

标签: php mysql serialization


【解决方案1】:

你的代码应该是这样的

try {
   $b = $_POST['key_id'];

   $stmt = new mysqli("example.com", "user", "password", "database");
   $stmt->prepare("Update serialized_data set value=? WHERE id = ?");
   $stmt->bind_param("si",$str1, $b);
   $stmt->execute();

} catch(Exception $e){
   echo $e->getMessage();
}

但是,我宁愿使用json 字符串而不是序列化字符串。

类似的东西

$data = array('key' => 'val');  // this is your original array before you serialize it
$a = json_encode($data);  //this will convert your array to a json string

那么当你从数据库中选择字符串时,你将使用json_decode($selectedString); // this will convert your json string into an object

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-24
    • 1970-01-01
    • 1970-01-01
    • 2017-11-23
    相关资源
    最近更新 更多