簡體   English   中英

使用 $_POST() 綁定 pdo 參數

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM