是否有可能從客戶端使用ajax(使用jQuery)發送JSON數據到PHP頁面並使用json_decode和所有變量完全相同的數據類型?我以爲JSON是想保留這個,但是如果你把它發送給PHP它似乎不起作用。如果它不這樣做,那麼我不知道爲什麼我會使用JSON。我可能只是使用標準的POST請求。從AJAX到PHP服務器的JSON。記住數據類型
我的問題是,我需要發送數據到PHP,它被插入到MySQL中,它需要插入正確的變量類型,但是當數據從JSON到達時,它將全部轉換爲字符串。我想我誤解了JSON的用途。最有可能的,如果有的話,任何人都可以向我解釋這一點?
這是否意味着我需要在整個Web應用程序中手動轉換PHP端的所有內容?這將是一個真正的痛苦。
// JavaScript:
$.ajax({
type: "POST",
url: "program.php",
data: {
posting: true,
json: JSON.stringify({
posting: true,
id: 6, // should remain an integer
})
},
success: function(data) {
console.log(data);
}
});
// PHP:
if (array_key_exists("posting", $_POST)) {
$result = json_decode($_POST["json"]);
echo gettype($result->id); // string (all values in $result are strings still)
exit();
}
編輯:我之所以很擔心變量的類型,因爲我想使用與MySQL準備好的語句和bind_param功能需要您輸入的變量類型。這是一個PHP函數,我創建來處理這對我來說:
public static function insert($query, $params) {
$statement = mysqli_prepare(self::$connection, $query);
foreach ($params as $value) {
switch (gettype($value)) {
case "boolean":
$value = (int) $value;
case "integer":
$statement->bind_param("i", $value);
break;
case "double":
$statement->bind_param("d", $value);
break;
case "string":
// it is ALWAYS a string even though some as suppose to be integers
$statement->bind_param("s", $value);
break;
default:
echo "error type: " . gettype($value);
return;
}
}
$statement->execute();
$statement->fetch();
$result = $statement->get_result();
$statement->close();
return $result;
}
幾個問題... 1.它是一個字符串如何防止插入/更新? 2.'POST'請求也是在$ _POST'數組中的字符串中進行的,那麼這將如何改變呢? – Jon
@Jon那麼我需要使用準備好的語句,所以我只是總是使用「bind_param」並將所有內容指定爲字符串? $ statement-> bind_param(「s」,$ value); – Mayron
@Jon我在帖子中增加了更多內容。希望這能回答你的問題。我對客戶端的任何JSON相關內容的需求感到困惑,因爲每次我在網上查看時,大家都說只是使用post請求,所以我不知道。 – Mayron