我有以下PHP脚本:
include("dbconnecti.php");
$cropId = $_POST['cropId'];
//echo 'the id is: ' . $cropId;
$query = "SELECT W.*,FI.*, PN.*, CONCAT(FI.fName, ' ', FI.lname) AS farmer
FROM `wantToSell` AS W, `produceName` AS PN, `farmerInfo` AS FI
WHERE W.farmerId = FI.farmerId AND W.produceId = PN.produceId AND W.produceId = '" . $cropId ."'";
$result = $dbconnect->query($query);
if($result){
while($row = $result->fetch_assoc()){
$allRows[] = $row;
}
echo json_encode($allRows);
}
else{
echo json_encode($dbconnect -> error);
die;
}
}
和JQuery脚本:
function cropDescrip(clicked_id) {
$.ajax({
url : "../php/cropdescrip.php",
type : "POST",
dataType : 'JSON',
cache : false,
data : {cropId : clicked_id},
success : function (data) {
console.log(data);
} //end success
}); //end ajax
} //end cropDescrip
如果我用实际值(例如tmt001)替换$_POST[cropId]
,则查询语句返回有效结果。但是当我通过jQuery Ajax调用将值传递给$_POST[cropId]
时,SQL查询返回一个空集。
echo
语句显示该值正在传递给PHP脚本。
发生了什么,我该如何解决?
答案 0 :(得分:0)
也许最好将代码更改为使用预准备语句。它可以解决您的问题以及消除您的SQL注入风险。像这样:
$stmt = $mysqli->prepare("SELECT W.*,FI.*, PN.*,
CONCAT(FI.fName, ' ', FI.lname) AS farmer
FROM `wantToSell` AS W, `produceName` AS PN, `farmerInfo` AS FI
WHERE W.farmerId = FI.farmerId AND W.produceId = PN.produceId AND W.produceId =?";
/* assuming cropId is a string given your quotes in the original */
$stmt->bind_param("s", $cropId);
/* execute query */
$stmt->execute();
$result = $stmt->get_result();
答案 1 :(得分:0)
在这里猜测,但看起来你传递的是该元素的clicked_id
,而不是该元素的值。从你的jQuery代码中试试这个:
function cropDescrip(clicked_id) {
$.ajax({
url : "../php/cropdescrip.php",
type : "POST",
dataType : 'JSON',
cache : false,
data : {cropId : $("#" + clicked_id).val()}, // <-- HERE
success : function (data) {
console.log(data);
} //end success
}); //end ajax
} //end cropDescrip
这会找到带有id的元素,使用element_id
作为选择器值。它将捕获该元素的值,并通过cropId
密钥传递给PHP服务器。
如果这不能按原样运行,那么准确地知道clicked_id
实际上是什么(显示它的HTML和Javascript代码)以及传递给PHP服务器的值是非常有用的。在$_POST[cropId]
。