好吧我有兩種不同的風格與我的服務器端PHP進行通信,我想知道是否有任何缺點都基於您的專家意見。在客戶端/服務器通信中使用這兩種不同樣式有沒有優點和缺點?
首先是從我客戶端HTML發送到我的服務器端PHP
function myCall(){
var name1 = "myName";
var name2 = "myOtherName";
var myString = "SELECT * FROM myTable WHERE id IS NOT NULL AND name='"+ name1 +"' AND secondName='"+name2+"'";
var xmlhttp = new XMLHttpRequest();
xmlhttp.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
recievedData = JSON.parse(this.responseText);
recievedData.forEach(function(item){
document.getElementById("demo").innerHTML += recievedData.name;
});
}
};
xmlhttp.open("GET", "myphp.php?q="+myString,true);
xmlhttp.send();
}
一個完整的字符串,然後由服務器端PHP
$q = $_REQUEST['q'];
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "myDB";
// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
$sql = $q;
$result = mysqli_query($conn, $sql) or die("Error in Selecting " . mysqli_error($conn));
$outp = array();
while($row=mysqli_fetch_assoc($result))
{
$outp[] = $row;
}
echo json_encode($outp);
?>
收到
然後還有另一種方法。 --------------------------------------
function myCall(){
var name1 = "myName";
var name2 = "myOtherName";
var myString = name1 + " " + name2;
var xmlhttp = new XMLHttpRequest();
xmlhttp.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
recievedData = JSON.parse(this.responseText);
recievedData.forEach(function(item){
document.getElementById("demo").innerHTML += recievedData.name;
});
}
};
xmlhttp.open("GET", "myphp.php?q="+myString,true);
xmlhttp.send();
}
而且收到這個PHP,但它使用explode()
把它變成一個PHP可以理解的數組。
$q = $_REQUEST['q'];
$exp = explode(" ", $q);
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "myDB";
// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
$sql = "SELECT * FROM myTable WHERE id IS NOT NULL AND name='"+ exp[0] +"' AND secondName='"+ exp[1] +"'";
$result = mysqli_query($conn, $sql) or die("Error in Selecting " . mysqli_error($conn));
$outp = array();
while($row=mysqli_fetch_assoc($result))
{
$outp[] = $row;
}
echo json_encode($outp);
?>
兩個歸還相同的結果,但不同的方法完全是這樣的......根據你的專家意見,有什麼可以去錯了這兩種不同的風格?
IMO,你不應該在你的HTML/JS代碼中寫一個SQL請求,因爲它會出現在頁面的源代碼中。因此第二種解決方案似乎更好。 – roberto06
你已經給自己開放了sql注入攻擊 – Pete