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

时间:2014-06-30 21:11:49

标签: php pdo json

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

但是,在我们的注册表上,有人将圣约翰的价值放入表格字段中。数据已成功编写,从我的phpMyAdmin控制台看起来没问题。但是,任何从该记录中获取数据的尝试都不起作用。执行似乎没有失败,因为我有一个try / catch执行,catch会给我发电子邮件。如果我删除撇号,那么我可以正常检索记录。

我一直在四处搜寻,我看到的所有人都说要使用准备好的陈述。我正在使用它们。他们还说addslashes()是一件坏事(而且我没有使用它)。我也尝试使用':hospital' => $db_pdo->quote($_POST['hospital']),但结果是插入的字段有额外的撇号,我不想要。也许有某种不引用的方法?

此外,知道我将整个行作为assoc_array获取然后json_encoding它以便我可以将其发送回来解释为JavaScript,其中数组的每个部分将被写入适当的字段可能是有用的。在表格上。

所以,我决定自己提问。

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

检索:     $ db_pdo->制备($ statement_SQL);

$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来获取数据,我认为我遇到了实际返回的字符问题。我得到非法字符或意外标识符。似乎“数据”中的所有内容都被抛弃和丢失。

// 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']); 

1 个答案:

答案 0 :(得分:0)

马修·约翰逊最接近答案,因为他提醒我清理数据库中数据的非常重要的一步。信任没有数据源,特别是如果数据是由经过验证的用户输入的,或者仅仅是用户期间。

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

我不确切地知道为什么我可以从PHP传递JSON_ENCODE数组并将其输出到div id并且它可以工作,但如果数据中有单引号则它不会工作。 JSON_ENCODE数组在JavaScript中可以正常工作,除非某些数据中包含单引号。

我使用$ .post来请求数据。它很简单并且有效,但我没有指定数据类型。 $ .post只是简化POST Ajax的快捷方式,因此我决定阅读$ .ajax。这允许我指定返回数据类型。此外,我发现没有必要将PHP的输出放入div中。输出转到一个名为“数据”的变量。无论如何,可以选择放置这些数据&#39;成为一个div。如果您从PHP脚本输出的ONLY THING是JSON_ENCODE数组,则JavaScript可以使用&#39;数据&#39;结果直接。我得到错误的实际原因是因为我试图将带有无效字符的数据输入到该div中。

我为了这个而去了互联网,所以希望有人找到这个问题并阅读以下代码:

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的变量中,删除任何不需要的字符,然后只回显一行,这将是本例中的最后一行。

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

DONE!魔法。