我有一个SQL查询,在执行它的Web托管PhpMyadmin时工作得很好。 但是,当我通过PHP代码使用它时,它不会返回任何数据。 等待任何帮助。
SQL查询:
SELECT
`students`.`name`
, `students`.`fatherName`
, `students`.`motherName`
, `students`.`regNo`
, `course`.`courseName`
, `subject`.`subjectName`
, `subject`.`subjectID`
, `course`.`examRollNo`
, `year`.`yearName`
, `papers`.`paperCode`
FROM
`jnuskenresult`.`course`
INNER JOIN `result`.`students`
ON (`course`.`ID` = `students`.`ID`)
INNER JOIN `result`.`subject`
ON (`subject`.`courseID` = `course`.`courseID`)
INNER JOIN `result`.`year`
ON (`year`.`subjectID` = `subject`.`subjectID`)
INNER JOIN `result`.`papers`
ON (`papers`.`yearID` = `year`.`yearID`)
WHERE (`students`.`regNo` ='ABC-AA-12345'
AND `year`.`yearName` ='Third Year');
这很完美 但是下面的php PDP代码不能在同一个数据库上工作。
$data =urldecode(($_GET['appno']));
//$dataSubject =htmlspecialchars(trim($_GET['subject']));
$dataYear =htmlspecialchars($_GET['year']);
$sql="SELECT
`students`.`name`
, `students`.`fatherName`
, `students`.`motherName`
, `students`.`regNo`
, `course`.`courseName`
, `subject`.`subjectName`
, `subject`.`subjectID`
, `course`.`examRollNo`
, `year`.`yearName`
, `papers`.`paperCode`
FROM
`SOMEDBNAME`.`course`
INNER JOIN `SOMEDBNAME`.`students`
ON (`course`.`ID` = `students`.`ID`)
INNER JOIN `SOMEDBNAME`.`subject`
ON (`subject`.`courseID` = `course`.`courseID`)
INNER JOIN `SOMEDBNAME`.`year`
ON (`year`.`subjectID` = `subject`.`subjectID`)
INNER JOIN `SOMEDBNAME`.`papers`
ON (`papers`.`yearID` = `year`.`yearID`)
WHERE (`students`.`regNo` =?
AND `year`.`yearName` =?)";
// we have to tell the PDO that we are going to send values to the query
$stmt = $conn->prepare($sql);
// Now we execute the query passing an array to execute();
$results = $stmt->execute(array($data,$dataYear));
//$results = $stmt->execute(array($data));
// Extract the values from $result
$rows = $stmt->fetchAll();
$error = $stmt->errorInfo();
//echo $error[2];
当我发送一个参数时,其他相同的代码正在工作。 我通过ajax调用发送两个参数作为GET方法。 谢谢你的帮助。
答案 0 :(得分:0)
尝试更改为:
INNER JOIN `SOMEDBNAME`.`students`
ON `course`.`ID` = `students`.`ID`
INNER JOIN `SOMEDBNAME`.`subject`
ON `subject`.`courseID` = `course`.`courseID`
INNER JOIN `SOMEDBNAME`.`year`
ON `year`.`subjectID` = `subject`.`subjectID`
INNER JOIN `SOMEDBNAME`.`papers`
ON `papers`.`yearID` = `year`.`yearID`
WHERE `students`.`regNo` = :regno
AND `year`.`yearName` = :yearname";
$stmt = $conn->prepare($sql);
$stmt->bindParam(':regno',$data,PDO::PARAM_STR);
$stmt->bindParam(':yearname',$dataYear,PDO::PARAM_STR);
$results = $stmt->execute();
你可以简单地使用:
$data =$_GET['appno'];
$dataYear =$_GET['year'];
所以只是为了确保问题只是你的变量值,将代码改为一分钟:
$stmt->bindParam(':regno','ABC-AA-12345',PDO::PARAM_STR);
$stmt->bindParam(':yearname','Third Year',PDO::PARAM_STR);
让我们看看结果......
答案 1 :(得分:0)
经过长时间的研究,我终于找到了解决这个问题的工作方案。
if (isset($_GET['appno'])) {
$data =$_GET['appno'];
$data = preg_replace('/[\x00-\x1F\x80-\xFF]/', '', $data);
$dataYear =$_GET['year'];
$stmt = $conn->prepare("SELECT
`students`.`name`
, `students`.`fatherName`
, `students`.`motherName`
, `course`.`courseName`
, `subject`.`subjectName`
, `year`.`yearName`
, `students`.`applicationNo`
, `papers`.`paperCode`
FROM
`SOMEDBNAME`.`students`
INNER JOIN `SOMEDBNAME`.`course`
ON (`students`.`ID` = `course`.`ID`)
INNER JOIN `SOMEDBNAME`.`subject`
ON (`subject`.`courseID` = `course`.`courseID`)
INNER JOIN `SOMEDBNAME`.`year`
ON (`subject`.`subjectID` = `year`.`subjectID`)
INNER JOIN `SOMEDBNAME`.`papers`
ON (`year`.`yearID` = `papers`.`yearID`)
WHERE (`year`.`yearName` = '$dataYear'
AND `students`.`applicationNo` = '$data')");
$results = $stmt->execute();
$rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
PHP PDO的内部联接问题遍布互联网。我希望这个解决方案能帮助其他人顺利地开展工作。
我还要感谢@Kim给予他宝贵的时间来解决这个问题。 无论如何快乐编码!!!