2016-04-25 141 views
-1

我遇到了PDO中绑定参数的问题。如果我想使用javascript中的两个输出参数,则会发生此问题。使用.AJAX将变量发送到PHP脚本(我测试过的JavaScript变量可以在我的PHP脚本中找到,它们的确的确如此)。

当我使用这个时,我不会收到错误消息变量但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); 
     } 
    }); 
}); 
+0

从哪里得到这个'$ dans'的价值? –

+0

我编辑了我的问题 –

+0

你没有检查任何地方的错误,我们不知道你的其他代码(JS/HTML)是什么样的。也看看你的控制台。 –

回答

0

从文档看来你需要在绑定调用中添加数据类型?例如stackoverflow.com/questions/2718628/pdoparam-for-type-decimal建议使用PDO :: PARAM_STR作为浮点数。还有什么echo $ _POST ['ycoord'],$ _POST ['xcoord']给你。

上面的链接建议您应该使用PDO:PARAM_STR您在哪里添加了回显,它应该尽可能靠近顶部,也许就在isset语句之前或之后。如果您继续面临问题,可以发布该回显语句的输出会很有帮助。