PHP MYSQL查询使用Ajax数据返回null,但不返回硬编码数据

时间:2016-06-04 01:40:10

标签: php jquery mysql

我有以下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脚本。

发生了什么,我该如何解决?

2 个答案:

答案 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]