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

时间:2015-07-23 05:13:12

标签: mysql sql arrays json mysqli

我有一个帮助用户输入数据的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);
    } 
?>

虽然它工作正常,但是当我输入类似这样的数据时

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));
    }
} 

但我得到&#34; null&#34;价值

3 个答案:

答案 0 :(得分:0)

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));
        }
    }
?>

答案 1 :(得分:0)

你所拥有的是0xc3a2e282ace2809c,它看起来像em dash,错误地utf8编码。 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

答案 2 :(得分:0)

使用此..

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

使用此

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