PHP MySQL:如何使用干净的数据插入和读取数据库

时间:2014-07-29 12:43:29

标签: php mysql string

我有一个包含3列的MySQL数据库(id,question,answer)。我使用一个代码将get方法插入到数据库中并进行了解密(清理),但我在mysqli中搜索一个方法。当我想从数据库中获得问题匹配的答案时,我会得到空白页面。 这是我用于插入的代码(它有效,但我需要mysqli):

require 'db.php';

function array_sanitize(&$item) 
{
    $item = htmlentities(strip_tags(mysql_real_escape_string($item)));
}

function InsertData($register_data) 
{
    array_walk($register_data, 'array_sanitize');
    $fields = '`' . implode('`, `', array_keys($register_data)) . '`';
    $data   = '\'' . implode('\', \'', $register_data) . '\'';
    mysql_query("INSERT INTO `db_question` ($fields) VALUES ($data)");
}

if ($_GET['code'] == "somecode")
{
    $data = array(
        'question' => $_GET['q']),
        'answer'   => $_GET['a']
    );
    InsertData($data);
    exit();
}

我更大的问题是,当我通过匹配问题来阅读答案时:

require 'db.php';

function sanitize($data) 
{
   return htmlentities(strip_tags(mysql_real_escape_string($data)));
}

if ($_GET['code'] == "somecode")
{
    $question = sanitize($_GET['q']);
    $result = mysql_query("SELECT `answer` FROM `db_question` WHERE `question` = '$question'");
    echo "
    <table id=\"box-table-b\">
    <thead>
        <tr>
        <th scope=\"col\">Answer</th>
        </tr>
    </thead>";
    if($row = mysql_fetch_array($result)) 
    {
        echo "<tbody>";
        echo "<tr>";
        echo "<td>" . $row['answer'] . "</td>";     
        echo "</tr>";
        echo "</tbody>";
    }
    echo "</table>";
}

我认为问题与get方法不一样,因为数据库中的问题和答案也包含如下字母:ă,î,ş,ţ,â 使用get方法,空格将被替换为%20,当我尝试通过id获得答案时,我得到“?”而不是那些字母。 如果有人可以帮助我。

即使我更新了我的代码:

$question = sanitize($_GET['q']);
        $result = mysql_query("SELECT `answer` FROM `tip_question` WHERE `question` = '$question'");
        echo "
        <table id=\"box-table-b\">
        <thead>
            <tr>
            <th scope=\"col\">Answer</th>
            </tr>
        </thead>";
        if($row = mysql_fetch_array($result)) 
        {
            echo "<tbody>";
            echo "<tr>";
            echo "<td>" . utf8_encode($row['answer']) . "</td>";        
            echo "</tr>";
            echo "</tbody>";
        }
        echo "</table>";

我仍然可以从数据库中获得任何答案。有人可以告诉我为什么吗?

2 个答案:

答案 0 :(得分:0)

如果您收到问号,则会出现字符集问题。您可以尝试this

要将代码更改为mysqli,请检查this

答案 1 :(得分:-1)

ă,î,ş,ţ是特别章程。

所以,你使用的是utf-8编码。

还要检查链接:How to create an XML file with special charaters

使用以下代码:

if($row = mysql_fetch_array($result)) 
    {
        echo "<tbody>";
        echo "<tr>";
        echo "<td>" . utf8_encode($row['answer']). "</td>";     
        echo "</tr>";
        echo "</tbody>";
    }