$ _POST()的pdo绑定参数

时间:2016-04-25 12:26:11

标签: php pdo

我在PDO中遇到绑定参数的问题。如果我想从javascript使用两个输出参数,则会出现此问题。使用.AJAX,变量被发送到PHP脚本。(我在PHP脚本中测试了javascript变量,确实是这样。)

当我使用这个变量但是没有执行SQL时,我没有收到错误消息。当我用像'12344'这样的整数替换javascript变量时,它可以工作。我使用的代码是:

session_start();
$user = 'postgres';
$pass = 'baf45baf';
$dans = $_SESSION['dans_code'];

if( isset($_POST['ycoord'], $_POST['xcoord']) ) {
$dbh = new PDO("pgsql:host=localhost;dbname=import", $user, $pass);
$sql = 'UPDATE geom_tijd SET x_coord= :x_coord, y_coord= :y_coord WHERE dans_code = :code';
$stmt = $dbh->prepare($sql);
$stmt->bindParam(':code', $dans);
$stmt->bindValue(':y_coord', $_POST['ycoord'],PDO::PARAM_INT);
$stmt->bindValue(':x_coord', $_POST['xcoord'],PDO::PARAM_INT);
$stmt->execute();

if (!$stmt) {
    echo "\nPDO::errorInfo():\n";
    print_r($dbh->errorInfo());
}

if($stmt->rowCount() == 0){
    echo "failure";
} else {
    echo "victory";

}
}

如果我回复xcoord,我会得到'212562.46720'和ycoord'520411.55763'。

$ dans变量是我从$ _SESSION ['dans_code']得到的变量; 这个变量早先来自php脚本,如果我只使用这个变量,它就可以工作。

这是我的javascript中获取并发送javascript值的部分。值是地图中鼠标定位点击的x和y坐标。这不是获取此变量的最佳方法,但它可以正常工作。

map.on('click', function() {
var show = document.getElementById("location").innerHTML;
var show_schoonmaken = show.replace('<div class="custom-mouse-position">',"");
var show_klaar = show_schoonmaken.replace('</div>',""); 
var show_done = show_klaar.replace(' ',""); 
var split = show_done.split(',');

document.getElementById("y_coördinaat").value = split[1];
document.getElementById("x_coördinaat").value = split[0];

    $.ajax({
        url: 'update_coordinates.php', //This is the current doc
        type: "POST",
        data: ({xcoord: split[0],ycoord: split[1]}),
        success: function(data){
            console.log(data);
            alert(data);
        }
    }); 
});

1 个答案:

答案 0 :(得分:0)

从docs看来你需要在bind调用中添加数据类型吗?例如stackoverflow.com/questions/2718628/pdoparam-for-type-decimal建议将PDO :: PARAM_STR用于浮点数。还有什么回声$ _POST [&#39; ycoord&#39;],$ _POST [&#39; xcoord&#39;]给你。

上面的链接建议你应该使用PDO:PARAM_STR你在哪里添加回声,它应该尽可能接近顶部,也许就在isset语句之前或之后。如果您继续遇到问题,可以发布该echo语句的输出。