首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用包含撇号的字段值使用PDO (mysql,not )提取数据不起作用

使用包含撇号的字段值使用PDO (mysql,not )提取数据不起作用
EN

Stack Overflow用户
提问于 2014-06-30 21:11:49
回答 1查看 198关注 0票数 0

我正在使用准备好的查询和将变量绑定到占位符。这是在插入数据时完成的。这是很好的工作,我通常没有问题。

然而,在我们的登记表上,有人将圣约翰的价值放入表单字段中。数据已经成功地写好了,从我的phpMyAdmin控制台看来也不错。但是,从该记录获取数据的任何尝试都不起作用。执行似乎没有失败,因为我在执行过程中进行了尝试/捕获,捕获将通过电子邮件发送给我。如果我移除撇号,那么我就可以正常地检索记录。

我到处搜索,我看到的只是人们说要使用预先准备好的陈述。我在用它们。他们还说addslashes()是一件坏事(我不这么说)。我也尝试过使用':hospital' => $db_pdo->quote($_POST['hospital']),但是结果是插入的字段有额外的撇号,我不想这样做。也许有某种不报价的方法?

另外,如果知道我将整行取为assoc_array,然后将其转换为json_encoding,这样我就可以将其发回解释为JavaScript,其中数组的每个部分都将被写入表单上的适当字段。

所以,我决定自己问一个问题。

示例代码:插入:':fname‘=> $_POST'fname',ENT_QUOTES,

检索:$db_pdo->pdo($statement_SQL);

代码语言:javascript
复制
$db_pdo->bind(':preregkey', $_POST['id']);

$retval_execute = $db_pdo->execute();

if($retval_execute){$retval_execute='true';}
else{$retval_execute = 'false';}
<br>";

$result = $db_pdo->statement->fetch(PDO::FETCH_ASSOC);
$output = json_encode($result);
echo "<script type='text/javascript'>"; 
echo " var formdata = '" . $output . "';";
echo "console.log('value: ', " . $_POST['id'] . ")" ;
echo "</script>";

我使用$.post获取数据,我认为我在实际返回的字符方面有问题。我得到非法字符或意外标识符。因此,“数据”中的所有东西似乎都会被倾弃和丢失。

代码语言:javascript
复制
// Gather the information for one pre-reg record, put the data into the form, switch to     the basic tab. 
function displayrecord_prereg(id) {
    // We were passed the id for the record, go get it!

    $.post('admin-board_p.php', { o: 'displayrecord_prereg', id: id}, function(data) {
        // Results have to go somewhere...
        console.log('data: ', data);
        $('#utilitydiv').html(data);
        // Make the JSON_ENCODE array actually usable in Javascript. 
        var formdata2 = JSON.parse(formdata);

        // Distribute the array of fields into their correct form field.
        // Must do it within this part of the function.
        $("#studentphoto").prop("value", formdata2['studentphoto']); 
        $("#grade").val(formdata2['grade']); 
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-07-02 02:53:15

马修·约翰逊( Matthew )最接近答案,因为他提醒我消毒DB数据的一个非常重要的步骤。不信任任何数据源,特别是如果数据是由验证的用户或仅由用户周期输入的。

经过大量的谷歌搜索和事实核查,我自己已经解决了这个问题。

我不知道为什么我可以从PHP中传递一个JSON_ENCODE数组并将其输出到div,并且它可以工作,但是如果数据中有单引号,它就不能工作。JSON_ENCODE数组在JavaScript中可以正常工作,除非某些数据中有单引号。

我使用$.post请求数据。这是简单和有效的,但我没有指定数据类型。$.post只是简化后Ajax的快捷方式,所以我决定阅读$.ajax。这允许我指定返回数据类型。此外,我发现没有必要将PHP的输出放到div中。无论如何,输出都会转到一个名为“data”的变量,将该“数据”放入div是可选的。如果您从PHP脚本中输出的唯一东西是一个JSON_ENCODE数组,那么JavaScript可以直接使用'data‘结果。我所犯错误的实际原因是我试图将无效字符的数据输入到div中。

我在互联网上到处寻找这个问题,希望有人能找到这个问题,并阅读以下代码:

JavaScript:

代码语言:javascript
复制
function displayrecordvalues(id) {
$.ajax({
    url: 'handler.php', 
    data: { o: 'displayrecord', id: id } ,
    type: "POST",
    dataType: 'json'
})
.success(
    function(formdata2){
        $("#studentphoto").prop("value", formdata2['studentphoto']); 
        $("#grade").val(formdata2['grade']); 
        $("#birthday").prop("value", formdata2['birthday']); 
        $("#gender").prop("checked", true);
        $("#fname").prop("value", formdata2['fname']); 
        $("#mname").prop("value", formdata2['mname']); 
        $("#lname").prop("value", formdata2['lname']); 
... etc...
    }
)
.fail(
    function(data){
        alert('error');
        console.log( "Data:", data);
    }
); 
}

PHP:.。将您的SQL数据行放入一个名为$result的变量中,删除任何不需要的字符,然后只回显一行,这将是本例中的最后一行。

代码语言:javascript
复制
// Intended for 1-row recordset
// Sanitize the data! (remember the '&' !)
$badchars = array("--", ";", );
foreach($result as &$v){
    $v = strip_tags($v);
    $v = htmlspecialchars($v); 
    $v = str_replace($badchars, "", $v);
}

echo json_encode($result);

完成了!魔术。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24499016

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档