我在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);
}
});
});
答案 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语句的输出。