以原始形式将数据保存在数据库中并以 json 格式获取结果

Posted

技术标签:

【中文标题】以原始形式将数据保存在数据库中并以 json 格式获取结果【英文标题】:save data in database in its original form and get result in json 【发布时间】:2015-10-13 05:51:22 【问题描述】:

我有一个帮助用户输入数据的 html 表单

<form action="insert.php" method="post" enctype="multipart/form-data">
Service Name
<input type="text" class="form-control" name="a"/>

Service Description
<input type="text" class="form-control" name="b"/>
</form>

insert.php 页面有助于在数据库中插入数据。

<?php
$a= mysqli_real_escape_string($con, $_POST['a']);
$b= mysqli_real_escape_string($con, $_POST['b']);

$sql= "INSERT INTO abc(a, b) VALUES ('$a','$b')";
if(mysqli_query($con,$sql))
    
        echo "success";
    
else 
    
        echo "Error: " . $sql . "<br>" . mysqli_error($con);
     
?>

虽然它工作正常,但是当我 i/p 数据时,像这样

ABC – DEF (ABC – ZYZ)

它以下列形式保存在数据库中

ABC – DEF(ABC †“ ZYZ)

谁能告诉我如何在没有 spl 字符的情况下以原始形式保存数据 我想做的另一件事是以json格式从数据库中获取数据,为此我使用过

$sql="SELECT * from abc";
$result = mysqli_query($con, $sql);

if(mysqli_num_rows($result)>0)

    while($row = mysqli_fetch_assoc($result))
    
        header('Content-type: application/json; charset=utf-8');
        echo json_encode(array('list'=>$row));
    
 

但我得到“空”值

【问题讨论】:

json_encode(array('list'=&gt;$posts));所在的位置发布完整的文件代码。 @Hassan 更新了我的帖子 另外,我不太确定 mysqli_real_escape 的意义。准备好的语句更简单、更安全。 @Strawberry 我可以将代码更改为所需的 pdo,但目前我遇到了 json 格式的问题 @lyra 我已经更新了我的答案。 【参考方案1】:

if(mysqli_query($con,$sql))前添加如下代码

$con->set_charset("utf8");

如果上述方法不起作用,则在if(mysqli_query($con,$sql))之前添加以下代码

mysqli_query($con, "SET NAMES 'utf8'"); 
mysqli_query($con, 'SET CHARACTER SET utf8');

更新为您的评论。

你也需要改变

header('Content-type: application/json');

进入

header('Content-type: application/json; charset=utf-8');

第二期的答案

<?php
    $sql="SELECT * from activity";
    mysqli_query($con, "SET NAMES 'utf8'");
    mysqli_query($con, 'SET CHARACTER SET utf8');

    $result = mysqli_query($con, $sql);

    if(mysqli_num_rows($result)>0)
    
        while($row = mysqli_fetch_assoc($result))
        
            header('Content-type: application/json; charset=utf-8');
            echo json_encode(array('list'=>$row));
        
    
?>

【讨论】:

我尝试了你的代码,值输入正确但是当我尝试将数组转换为 json header('Content-type: application/json'); echo stripslashes(json_encode(array('list'=>$posts)));我将 o/p 值设为“null” @lyra 我已经更新了我的答案。为什么你使用stripslashes?请更新您的问题。 我已经更新了帖子并尝试了你的方法,但我仍然得到结果为空 @lyra 请var_dump($row); 告诉我结果是什么。 o/p is array(5) ["id"]=> string(2) "37" ["activityname"]=> string(41) "ABC – DEF (ABC – ZYZ )" ["activityprice"]=> string(0) "" ["image"]=> string(66) "xyz" ["activity_info"]=> string(41) "ABC – DEF (ABC – ZYZ)" 【参考方案2】:

使用这个..

header('Content-Type: text/html; charset=utf-8');

在表单标签中使用这个

<form accept-charset="utf-8">

【讨论】:

我做到了,我能够正确输入值但无法将其转换为 json【参考方案3】:

您所拥有的是0xc3a2e282ace2809c,它看起来像一个不正确的utf8 编码的em dash。 em dash 实际上是 0xe28094,如果你在 PHP 中做类似 utf8_encode(hex2bin('e28094')) 的事情,你会得到类似的结果。这意味着您的 PHP 在连接到 MySQL 时没有正确协商字符集编码,或者您的架构使用不同的排序规则来解释数据,而实际上是以不同的字符集编码。

首先检查架构的排序规则设置以确认这一点,然后确保在通过mysqli::set_charset 连接到 MySQL 时始终设置所需的字符集,例如mysqli_set_charset($con, 'utf8')。这是这样做的首选方式(尽量不要使用SET NAMES,因为它有一些警告,可能会在以后再次击中你的脚)。您必须执行此操作在 DBMS 中执行任何操作以使其生效(即在您在上面的示例中调用 mysqli_real_escape_string 之前) .另请参阅character sets concepts 了解更多详情。

【讨论】:

我已经完成了你的建议并更新了我的帖子。你能通过一次吗? 如果你从json_encode 得到null,这意味着json_encode 失败,我猜这是因为你的UTF-8 无效。如果您尝试使用已损坏并以损坏形式保存在数据库中的数据进行此操作,您可能会继续看到此问题。您无法通过这种方法修复已保存在损坏编码中的内容。您必须使用新数据进行测试。

以上是关于以原始形式将数据保存在数据库中并以 json 格式获取结果的主要内容,如果未能解决你的问题,请参考以下文章

如何将数据从 iOS 中的数据模型存储到核心数据中并以数据模型的格式获取

将视图批量新增到PowerDesigner中并以model图表的形式展示

来讲讲怎样获取到url上所有参数并以对象形式保存,再讲讲JSON解析与序列化

如何使用 Ruby 将数据保存到 JSON 中并在以后使用?

Android 使用 AsyncTask 连接 MySql 并以 JSON 或 String 的形式返回数据

视图的概述