[英]pdo binding parameters with $_POST()
我在 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 值。 這些值是地圖中鼠標位置 onclick 的 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);
}
});
});
從文檔看來您需要在綁定調用中添加數據類型? 例如,stackoverflow.com/questions/2718628/pdoparam-for-type-decimal 建議使用 PDO::PARAM_STR 作為浮點數。 還有什么 echo $_POST['ycoord'], $_POST['xcoord'] 給你。
上面的鏈接建議你應該使用 PDO:PARAM_STR 你在哪里添加回聲,它應該盡可能靠近頂部,可能就在 isset 語句之前或之后。 如果您繼續遇到問題,如果您可以發布該 echo 語句的輸出,將會很有幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.